如何仅查找并复制主目录下的前 100 个 .jpg 文件(包括其中的所有子目录)?

如何仅查找并复制主目录下的前 100 个 .jpg 文件(包括其中的所有子目录)?

我编码如下:

$ find . -maxdepth 1 -name '*.jpg' | head -n 100 | xargs -0 {} cp {} /home/rachael/backup

错误显示:

xargs: {}: No such file or directory

我的代码有什么问题以及如何修复?

答案1

Steeldriver 查明了您的命令的一些问题,但我只是想使用zshshell 添加一个更短的解决方案(因为问题并不特定于任何一个 shell):

cp -- *.jpg(.[1,100]) ~rachel/backup

这将复制当前目录中与通配模式匹配的前 100 个(按字典顺序)常规文件*.jpg

对于按修改时间戳显示的 100 个最旧的文件,请使用*.jpg(.Om[1,100]),并使用小写字母o而不是O获取 100 个最近修改的文件。使用nin 代替Om 来获取文件名的数字排序,并使用 addD来匹配隐藏名称。

答案2

有几件事:

  1. -I您的命令中缺少 axargs来告诉它的{}用途

  2. 告诉我们-0期待xargs空分隔的输入,但您传递的是换行符分隔的输入

所以

find . -maxdepth 1 -name '*.jpg' -print0 | head -zn 100 | xargs -0 -I{} cp {} /home/rachael/backup

如果您有 GNU 版本的cp,您可能需要使用替代形式

find . -maxdepth 1 -name '*.jpg' -print0 | head -zn 100 | xargs -0 cp -t /home/rachael/backup

相关内容