是否可以使用cp命令将一个文件复制到多个目录?
我尝试了以下方法,但没有奏效:
cp file1 /foo/ /bar/
cp file1 {/foo/,/bar}
我知道可以使用for循环,或者find。但是可以使用gnu cp命令吗?
是否可以使用cp命令将一个文件复制到多个目录?
我尝试了以下方法,但没有奏效:
cp file1 /foo/ /bar/
cp file1 {/foo/,/bar}
我知道可以使用for循环,或者find。但是可以使用gnu cp命令吗?
当前回答
不——你不能。
我发现在很多情况下我可以使用这个功能,所以我制作了自己的工具来为我做这件事。
http://github.com/ddavison/branch
很简单—— 分支myfile dir1 dir2 dir3
其他回答
这将复制到直接子目录,如果你想深入,调整-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的建议。
ls -d */ | xargs -iA cp file.txt A
我会根据我在https://superuser.com/questions/32630/parallel-file-copy-from-single-source-to-multiple-targets上看到的答案使用cat和tee,而不是cp。
例如:
cat inputfile | tee outfile1 outfile2 > /dev/null
如果需要指定要将文件复制到哪个文件夹,可以将find与一个或多个grep组合在一起。例如,要替换任何出现在任何子文件夹中的favicon.ico,你可以使用:
find . | grep favicon\.ico | xargs -n 1 cp -f /root/favicon.ico
不是使用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调用)快得多。