如何使用GNU cp命令将文件复制到多个目录如何使用GNU cp命令将文件复制到多个目录(How t

2019-05-12 11:52发布

是否有可能复制一个文件使用cp命令多个目录?

我尝试以下,没有工作:

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

我知道这是可能使用for循环,或发现。 但是使用GNU cp命令这可能吗?

Answer 1:

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



Answer 2:

你不能做到这一点cp孤独,但你可以结合cpxargs

echo dir1 dir2 dir3 | xargs -n 1 cp file1

将复制file1dir1dir2 ,和dir3xargs会打电话给cp 3次做到这一点,请参见手册页xargs详细信息。



Answer 3:

通配符也与罗伯茨代码工作

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


Answer 4:

至于我可以看到它,你可以使用以下命令:

ls | xargs -n 1 cp -i file.dat

-i的选项cp命令意味着你会被询问是否覆盖文件与当前目录file.dat 。 虽然它不是一个完全自动化解决方案,它的工作为我。



Answer 5:

我会用cattee基于我在看到答案https://superuser.com/questions/32630/parallel-file-copy-from-single-source-to-multiple-targets而不是cp

例如:

cat <inputfile> | tee <outfile1> <outfile2> > /dev/null


Answer 6:

ls -db di*/subdir | xargs -n 1 cp File

-b万一有目录名 ,否则将被打破由xargs的不同项的空间 ,有这个问题的回声版本



Answer 7:

这些答案都显得较明显更加复杂:

for i in /foo /bar; do cp "$file1" "$i"; done


Answer 8:

不使用CP本身,而是......

这在复制大量的GoPro的镜头断(慢)SD卡三(慢)USB驱动器的情况下想出了我。 我想读的数据只有一次,因为它永远了。 我想它的递归。

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

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

我没有那个基准,但它绝对不是CP-IN-A-环(或一束平行CP调用的)快很多。



Answer 9:

要使用复制与xargs使用在Mac OS,只为我工作空格目录名称是解决通配符目录:

find ./fs*/* -type d -print0 | xargs -0 -n 1 cp test 

test是要复制的文件
./fs*/*目录复制到

问题是,xargs的看到空间作为一个新的说法,该方案改变使用分隔符-d-E家饭店无法正常工作在Mac OS。



Answer 10:

如果你想这样做不分叉的命令:

tee <inputfile file2 file3 file4 ... >/dev/null



Answer 11:

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

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

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

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

注意:这可能只是转让了非常具体的用例任何明显的速度增长,例如,如果每个目标目录是一种独特的磁盘。

这也是在功能上类似于xargs的了“-P”的说法。



Answer 12:

使用bash脚本

DESTINATIONPATH[0]="xxx/yyy"
DESTINATIONPATH[1]="aaa/bbb"
                ..
DESTINATIONPATH[5]="MainLine/USER"
NumberOfDestinations=6

for (( i=0; i<NumberOfDestinations; i++))
    do
        cp  SourcePath/fileName.ext ${DESTINATIONPATH[$i]}

    done
exit


Answer 13:

你不能。

我已经在多个场合,所以我做了我自己的工具来为我做这个,我可以使用此功能找到。

http://github.com/ddavison/branch

很简单 -
branch myfile dir1 dir2 dir3



Answer 14:

ls -d */ | xargs -iA cp file.txt A


Answer 15:

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

  1. 获取所有子目录的名称通过ls并将它们保存到一些临时文件说, allFolders.txt

     ls > allFolders.txt 
  2. 打印列表,并把它传递给命令xargs

     cat allFolders.txt | xargs -n 1 cp fileName.txt 


Answer 16:

另一种方法是用猫和T如下:

cat <source file> | tee <destination file 1> | tee <destination file 2> [...] > <last destination file>

我认为这将是非常低效虽然,因为这项工作将多个进程(每个目的地之一)和硬盘驱动器会立即在盘片的不同部分被写入多个文件之间进行拆分。 不过,如果你想写一个文件出来几个不同的驱动器,这种方法很可能是非常有效的(因为所有副本可能同时发生)。



Answer 17:

如果您希望将多个文件夹复制到多个文件夹可以做这样的事情:

回声DIR1 DIR2 DIR3 | xargs的-n 1个CP -r /路径/ toyourdir / {subdir1,subdir2,subdir3}



Answer 18:

如果您需要具体的到哪些文件夹复制你可以结合文件中找到与一个或多个里grep。 例如更换为favicon.ico的任何OCCURENCES任何子文件夹,您可以使用:

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


Answer 19:

这将复制到眼前的子目录,如果你想要去更深,调整-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

如果复制到任意波形/分离集的目录,你需要罗伯特宝洁的建议。



Answer 20:

我喜欢将文件复制到多个目录这样: cp file1 /foo/; cp file1 /bar/; cp file1 /foo2/; cp file1 /bar2/ cp file1 /foo/; cp file1 /bar/; cp file1 /foo2/; cp file1 /bar2/ cp file1 /foo/; cp file1 /bar/; cp file1 /foo2/; cp file1 /bar2/和复制一个目录到其他目录: cp -r dir1/ /foo/; cp -r dir1/ /bar/; cp -r dir1/ /foo2/; cp -r dir1/ /bar2/ cp -r dir1/ /foo/; cp -r dir1/ /bar/; cp -r dir1/ /foo2/; cp -r dir1/ /bar2/

我知道这就像发出几个命令,但它很适合我,当我想类型1行,然后走开了一会儿。



Answer 21:

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

对于i在$(LS); 做CP的资源文件I $; DONE



文章来源: How to copy a file to multiple directories using the gnu cp command
标签: linux bash shell