이후 find 명령에서 -exec grep을 어떻게 실행할 수 있습니까?

이후 find 명령에서 -exec grep을 어떻게 실행할 수 있습니까?

loader.gif원격 컴퓨터에서 모든 파일을 폴더 로 이동해 보았습니다./Pictures

find . -iname *.gif | grep loader이동하고 싶은 파일 4개를 보여주며 자연스럽게 시도해 보았습니다.find . -iname *.gif | grep loader -exec cp *.gif /home/me/

loader.gifa find및 a 명령을 통해 grep내 기준과 일치하는 모든 파일을 어떻게 복사할 수 있나요 ? ( grep원래 find 명령이 모든 파일을 표시하기 때문에 이것을 사용하고 있지만 파일 이름 .gif만 원합니다 .)loader.gif

답변1

GNUly:

find . -iname '*.gif' -print0 | grep -z loader | xargs -r0 cp -t /home/me

POSIX적으로:

find . -name '*.[gG][iI][fF]' -path '*loader*' -exec sh -c '
  exec cp "$@" /home/me' sh {} +

(필자는 -path이를 솔루션과 동일하게 사용했지만 디렉토리 구성 요소가 아닌 파일 이름에서 grep찾으려는 것처럼 들립니다 loader. 이 경우 를 사용해야 합니다 -name.)

-iname '*.gif'대문자 로케일 (예: GNU 시스템의 터키어 로케일) 에서는 일치하지 않을 수 있습니다 ..GIFiİI

답변2

내 생각에 xargs더 간단하고 간단한 해결책은 다음과 같습니다.

find . -iname *.gif | grep loader | xargs cp -t /home/me

관련 정보