我想在包含所有子目录 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 {} \;