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

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

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

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


当前回答

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

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

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

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

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

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

其他回答

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

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

不——你不能。

我发现在很多情况下我可以使用这个功能,所以我制作了自己的工具来为我做这件事。

http://github.com/ddavison/branch

很简单—— 分支myfile dir1 dir2 dir3

假设要将fileName.txt复制到当前工作目录中的所有子目录。

通过ls获取所有子目录的名称,并将它们保存到某个临时文件中,例如allFolders.txt ls > allFolders.txt 打印列表并将其传递给命令xargs。 cat allFolders.txt | xargs -n 1 cp fileName.txt

通配符也适用于Roberts代码

echo ./fs*/* | xargs -n 1 cp test 

不是使用cp本身,而是…

当我从一张(慢的)SD卡复制大量Gopro镜头到三个(慢的)USB驱动器时,我想到了这个问题。我想只读取一次数据,因为这要花很长时间。我想让它递归。

$ tar cf - src | tee >( cd dest1 ; tar xf - ) >( cd dest2 ; tar xf - ) | ( cd dest3 ; tar xf - )

(如果你想要更多的输出,你可以添加更多的>()部分。)

我还没有对它进行基准测试,但它肯定比cp-in-a-loop(或一堆并行cp调用)快得多。