是否可以使用cp命令将一个文件复制到多个目录?

我尝试了以下方法,但没有奏效:

cp file1 /foo/ /bar/
cp file1 {/foo/,/bar}

我知道可以使用for循环,或者find。但是可以使用gnu cp命令吗?


当前回答

如果需要指定要将文件复制到哪个文件夹,可以将find与一个或多个grep组合在一起。例如,要替换任何出现在任何子文件夹中的favicon.ico,你可以使用:

find . | grep favicon\.ico | xargs -n 1 cp -f /root/favicon.ico

其他回答

例如,如果你在目标文件夹的父目录中,你可以这样做:

I用$(ls)表示;执行cp source文件$i;完成

本质上等同于xargs的答案,但如果你想并行执行:

parallel -q cp file1 ::: /foo/ /bar/

例如,将file1复制到当前文件夹的所有子目录中(包括递归):

parallel -q cp file1 ::: `find -mindepth 1 -type d`

注意:这可能只在非常特定的情况下才会带来明显的速度提升,例如,如果每个目标目录是一个不同的磁盘。

它在功能上也类似于xargs的'-P'参数。

我会根据我在https://superuser.com/questions/32630/parallel-file-copy-from-single-source-to-multiple-targets上看到的答案使用cat和tee,而不是cp。

例如:

cat inputfile | tee outfile1 outfile2 > /dev/null

不,cp可以复制多个源,但只会复制到单个目标。您需要安排多次调用cp—每个目的地一次—用于您想要做的事情;就像你说的,使用循环或其他工具。

这将复制到直接子目录,如果你想深入,调整-maxdepth参数。

find . -mindepth 1 -maxdepth 1 -type d| xargs -n 1 cp -i index.html

如果您不想复制到所有目录,希望您可以过滤您不感兴趣的目录。复制到所有以a开头的文件夹

find . -mindepth 1 -maxdepth 1 -type d| grep \/a |xargs -n 1 cp -i index.html

如果复制到任意/不连贯的目录集,您将需要Robert Gamble的建议。