2010-01-07 7 views
4

find ./dir -type f -iname "*.t[argz]*[bz2]" -print | xargs mv --target-directory=dir 은 이름에 공백이있는 파일에서 실패한 것으로 보입니다. 개선 방법 또는 대안? 아래 답변에 대한리눅스에서 파일을 반복적으로 이동

감사 : 내 MV가 --null 또는 -0를 지원하지 않습니다, 나는 Cygwin에서 사용하고 다음 find 명령에

 
$ mv --help 
Usage: mv [OPTION]... [-T] SOURCE DEST 
    or: mv [OPTION]... SOURCE... DIRECTORY 
    or: mv [OPTION]... -t DIRECTORY SOURCE... 
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY. 

Mandatory arguments t 
. 

답변

7

사용 -print0 대신 -print을하고 xargs를 -0을 (또는 --null) 옵션 - NUL은 개행 문자 및 공백 문자가 아닌 구분 기호로 사용됩니다.

find ./dir -type f -iname "*.t[argz]*[bz2]" -print0 | xargs --null mv --target-directory=dir 
+0

$ 찾을 ./ 타입 F -iname "* .XLS"-print0을 찾아 | xargs mv --null --target-directory = x ls xargs : 경고 : 입력에 NUL 문자가 발생했습니다. 인수 목록에 우를 전달할 수 없습니다. --null 옵션을 사용하려고 했습니까? mv : 인식 할 수없는 옵션'--null ' 자세한 정보는'mv --help'를 시도하십시오. – user217631

+0

죄송합니다 - marg 옵션이 아닌 xargs 옵션이 있어야합니다! 결정된. –

0

찾기에 대해 -exec 옵션을 보았습니까?

find ./dir -type f -iname "*.t[argz][bz2]" -exec mv {} --target-directory=dir ';' 

-exec 옵션은 따옴표로 묶인 세미콜론을 볼 때까지 명령 다음에 오는 옵션을 실행합니다. 이렇게하면 간격 문제를 다룰 필요가 없습니다.

+1

이것은 모든 파일에 대한 하위 프로세스를 생성하지만 xargs 변형은 수백 개의 파일을 동일한 명령 줄에 일괄 처리합니다. 단일 mv 호출과 같은 작은 작업의 경우 성능 차이가 클 수 있습니다. martin이 위에서 지적한 것처럼 -print0과 --null을 사용해야하지만 파일 이름에 공백이 없다는 것을 확실하게 알지 못한다면 말입니다. –

0

GNU

find ./dir -type f -iname "*.t[argz]*[bz2]" -exec mv "{}" /destination +; 
관련 문제