我怎样才能在 | 之后在 find 命令上运行 -exec grep

我怎样才能在 | 之后在 find 命令上运行 -exec grep

我在远程计算机上尝试将所有文​​件移至文件夹loader.gif/Pictures

find . -iname *.gif | grep loader显示了我想移动的四个文件,我自然尝试过:find . -iname *.gif | grep loader -exec cp *.gif /home/me/

如何loader.gif通过 afind和 agrep命令复制符合我的条件的所有文件? (我使用是grep因为原始 find 命令结果显示所有.gif文件,但我只需要loader.gif文件名)

答案1

GNUly:

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

POSIXly:

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

(我使用的-path所以它与解决方案等效grep,但听起来您希望loader在文件名中找到而不是其目录组件,在这种情况下您应该使用-name)。

请注意,在大写的语言环境中,可能-iname '*.gif'无法匹配 a (例如 GNU 系统上的土耳其语语言环境)。.GIFiİI

答案2

我认为xargs更简单直接的解决方案是:

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

相关内容