假设我在主目录中有 10 个子目录,分别名为 d1、d2、d3、...、d10。如何使用 cp 将文件复制到所有这些子目录中?
我正在寻找类似的东西
cp ./my_file.txt ./d*/
答案1
由于多种原因,这种方式无法工作:首先,cp
只接受一个目标参数。例如,如果您执行以下命令
cp file1.txt file2.txt something_else.txt my_destination/
从参数列表中cp
,file1.txt dir7/ file2.txt my_destination/
只有最后一个参数将被解释为将其他参数复制到的目的地。
其次,Bash 中通配符的处理方式与你想象的不同。Bash 做了很多所谓的扩展在相关命令被调用之前。其中一个扩展涉及*
通配符。
假设您有目录d1
、d2
和d3
。在这种情况下,Bash 将扩展d*
为d1 d2 d3
。因此以下
cp my_file.txt d*
会成为
cp my_file.txt d1 d2 d3
cp
甚至在被调用之前。这意味着“复制myfile.txt
,d1
然后d2
到d3
”。请记住,只有最后一个参数才会被解释为目标。
您可以做的是简单地for
循环遍历目录。给您一个大致的想法:
for DIR in d*; do
cp my_file.txt "$DIR"
done
如果你也有文件除了目录之外,还会匹配d*
,事情会变得更加复杂。但那将是一个单独的问题 ;)