cp 许多子目录中带有 * 的文件

cp 许多子目录中带有 * 的文件

我想在包含所有子目录 2_bas 的目录中复制文件“test.sh”(例如 prod1/2_bas、prod2/2_bas 等...)

我试过:

cp test */2_bas/

但我收到错误信息:

cp: omitting directory `prod1/2_bas'
cp: omitting directory `prod2/2_bas' 

解决办法是:

for dir in *; do [ -d "$dir" ] && cp test.sh "$dir"/2_bas ; done

但为什么第一个策略不起作用呢?

答案1

这就是cp命令的设计工作方式;它接受多个源,但只接受一个目标。因此您的扩展如下所示:

cp test prod1/2_bas prod2/2_bas prod3/2_bas .... prodN/2_bas

而您所说的cp基本上是将所有内容复制到 prodN/2bas(扩展中的最后一个目录)中。这肯定不是您想要的。您看到的错误消息是因为您要求cp复制目录,但默认情况下它拒绝这样做(除非您指定,例如,-r进行递归复制。但是,不要这样做;它仍然不会执行您想要的操作)。

查看cp手册页,它说明了该命令的作用:

Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

另一个解决方案:

find ./ -type -d exec cp test {} \;

相关内容