현재 작업 디렉터리에는 1에서 100 사이의 번호가 매겨진 여러 테스트 파일이 있습니다. 이 파일의 제목은 1.txt
To 입니다 100.txt
.
이 명령은 find . -maxdepth 1 -regextype posix-egrep -regex '.*/[ -._&a-zA-Z0-9]+\.txt' -exec bash -c 'mv "$@" "TestDir - Level One"' {} +
하나를 제외한 모든 파일을 이동합니다 15.txt
.
대신 이 명령은 find . -maxdepth 1 -regextype posix-egrep -regex '.*/[ -._&a-zA-Z0-9]+\.txt' -exec mv {} "TestDir - Level One"/ \;
모든 파일을 이동합니다.
명령을 다시 실행 하면 find . -maxdepth 1 -regextype posix-egrep -regex '.*/[ -._&a-zA-Z0-9]+\.txt' -exec bash -c 'mv "$@" "TestDir - Level One"' {} +
오류가 반환됩니다.mv: missing destination file operand after 'TestDir - Level One' Try 'mv --help' for more information.
버전 find
은find (GNU findutils) 4.7.0-git
답변1
$0
호출에 대한 문자열 할당이 누락되었습니다 bash -c '…'
. 호출의 첫 번째 인수는 대신 (쉘 이름) find
에 할당되므로 이동되지 않습니다.$0
$1
-c
이 옵션이 있으면-c
옵션이 아닌 첫 번째 인수 command_string에서 명령을 읽습니다. command_string 뒤에 매개변수가 있는 경우첫 번째 인수는 위치 인수에 할당되고$0
나머지 인수는 위치 인수에 할당됩니다. 할당은$0
경고 및 오류 메시지에 사용되는 셸의 이름을 설정합니다.
(강조는 내 것)
명령을 다음으로 변경하십시오.
find . [more find options…] -exec bash -c 'mv "$@" "TestDir - Level One"' bash {} +