その後、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.gifafindと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

関連情報