명령에서 출력 된 모든 파일을 어떻게 이동합니까?


22

첨부 파일이라는 단어가없는 파일을 찾으려면이 grep 명령이 있습니다.

grep -L -- Attachments *

해당 명령에서 출력되는 모든 파일을 이동하고 싶습니다. bash에서 어떻게합니까? 파이프를 사용합니까? 완전한 스크립트에서 더 현명한 if / then 문을 사용합니까?

답변:


18

파일 이름에 일치하는 줄, 탭, 공백 또는 글로브 조합이 포함되어 있지 않은 경우, 한 번의 경우가 더 쉬울 수 있습니다.

mv $(grep -L Attachments *) dest_dir

36

당신이하고 싶은 것은 파이프와 greps -Z옵션을 사용하는 것입니다 :

GNU grep 및 mv 사용

grep -LZ -- Attachments * | xargs -0 mv -t target_directory

-Z과 함께 xargs -0특수 문자 핸들이있는 파일 이름.

BSD grep 및 mv 사용 (MacOS X 에서처럼)

grep -L --null -- Attachments * |
while IFS= read -r -d "" file; do 
    mv "./$file" target_directory
done

BSD에서 grep -Z수단 압축 해제 , grep --nullBSD와 GNU 모두에서 작동합니다. BSD mv에는 옵션이 없다-t

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.