如何使用 cp 和通配符将文件复制到所有子目录

如何使用 cp 和通配符将文件复制到所有子目录

假设我在主目录中有 10 个子目录,分别名为 d1、d2、d3、...、d10。如何使用 cp 将文件复制到所有这些子目录中?

我正在寻找类似的东西

cp ./my_file.txt ./d*/

答案1

由于多种原因,这种方式无法工作:首先,cp只接受一个目标参数。例如,如果您执行以下命令

cp file1.txt file2.txt something_else.txt my_destination/

从参数列表中cpfile1.txt dir7/ file2.txt my_destination/只有最后一个参数将被解释为将其他参数复制到的目的地。

其次,Bash 中通配符的处理方式与你想象的不同。Bash 做了很多所谓的扩展在相关命令被调用之前。其中一个扩展涉及*通配符。

假设您有目录d1d2d3。在这种情况下,Bash 将扩展d*d1 d2 d3。因此以下

cp my_file.txt d*

会成为

cp my_file.txt d1 d2 d3

cp甚至在被调用之前。这意味着“复制myfile.txtd1然后d2d3”。请记住,只有最后一个参数才会被解释为目标。

您可以做的是简单地for循环遍历目录。给您一个大致的想法:

for DIR in d*; do
  cp my_file.txt "$DIR"
done

如果你也有文件除了目录之外,还会匹配d*,事情会变得更加复杂。但那将是一个单独的问题 ;)

答案2

您可以使用 xargs 命令执行此操作。

echo ./d* | xargs -n 1 cp -v ./my_ file.txt

人xargs

相关内容