mv가 모든 파일을 찾아서 이동하지 않는 이유는 무엇입니까?

mv가 모든 파일을 찾아서 이동하지 않는 이유는 무엇입니까?

현재 작업 디렉터리에는 1에서 100 사이의 번호가 매겨진 여러 테스트 파일이 있습니다. 이 파일의 제목은 1.txtTo 입니다 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.

버전 findfind (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 {} +

관련 정보