cp:无法统计'./1_true/*':没有这样的文件或目录,当找到目录并复制文件时

cp:无法统计'./1_true/*':没有这样的文件或目录,当找到目录并复制文件时

我有很多这样的目录:

$ ls 
  1_true 1_false 2_true 2_false 3_true 3_false ...

我想将“*_true/”中的文件复制到其他目录。

当我运行如下命令时

find . -name "*_true" -exec cp "{}"/* "../out_true" ";"

这给了我如下错误信息:

cp: cannot stat './1_true/*': No such file or directory
cp: cannot stat './2_true/*': No such file or directory
cp: cannot stat './3_true/*': No such file or directory
...

如何修复此错误?谢谢!

注意:我的“真实”目录数量超过 100000

答案1

你可以简化它

cp ?_true/* ../out_true/

也能起作用。

但是,如果你有大量文件

答案2

找到答案,使用xargs而不是-exec

find . -name "*_true" -print0 | xargs --null -I{} sh -c 'cp "$1"/* "../out_true"' -- {}

答案3

您可以限制寻找下降不超过 n 级-maxdepth。这将匹配*_真的并使用复制内容同步。源目录上的尾部斜杠将改变 rsync 的行为,仅复制目录的内容而不是目录本身。

find -maxdepth 1 -type d -name '*_true' -exec rsync -a "{}/" ../out_true \;

或者

for i in *_true; do
    rsync -a "$i/" ../out_true
done

相关内容