我编码如下:
$ find . -maxdepth 1 -name '*.jpg' | head -n 100 | xargs -0 {} cp {} /home/rachael/backup
错误显示:
xargs: {}: No such file or directory
我的代码有什么问题以及如何修复?
答案1
Steeldriver 查明了您的命令的一些问题,但我只是想使用zsh
shell 添加一个更短的解决方案(因为问题并不特定于任何一个 shell):
cp -- *.jpg(.[1,100]) ~rachel/backup
这将复制当前目录中与通配模式匹配的前 100 个(按字典顺序)常规文件*.jpg
。
对于按修改时间戳显示的 100 个最旧的文件,请使用*.jpg(.Om[1,100])
,并使用小写字母o
而不是O
获取 100 个最近修改的文件。使用n
in 代替Om
来获取文件名的数字排序,并使用 addD
来匹配隐藏名称。
答案2
有几件事:
-I
您的命令中缺少 axargs
来告诉它的{}
用途告诉我们
-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