是否可以使用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命令吗?
当前回答
我喜欢复制一个文件到多个目录,就像这样: 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/ .使用实例
我知道这就像发出几个命令,但当我想输入一行然后离开一会儿时,它对我来说很有效。
其他回答
另一种方法是使用cat和tee,如下所示:
cat <source file> | tee <destination file 1> | tee <destination file 2> [...] > <last destination file>
我认为这将是相当低效的,尽管,因为工作将被分割在几个进程(一个目的地)和硬盘驱动器将写入几个文件一次在不同的部分盘片。然而,如果你想把一个文件写到几个不同的驱动器上,这个方法可能会非常有效(因为所有的拷贝都可以并发进行)。
如果你想复制多个文件夹到多个文件夹,你可以这样做:
echo dir1 dir2 dir3 | xargs -n 1 cp -r path / toyourdir - {subdir1 subdir2, subdir3}
如果你所有的目标目录都匹配一个路径表达式——比如它们都是path/to的子目录——那么就像这样使用find和cp的组合:
find ./path/to/* -type d -exec cp [file name] {} \;
就是这样。
使用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
本质上等同于xargs的答案,但如果你想并行执行:
parallel -q cp file1 ::: /foo/ /bar/
例如,将file1复制到当前文件夹的所有子目录中(包括递归):
parallel -q cp file1 ::: `find -mindepth 1 -type d`
注意:这可能只在非常特定的情况下才会带来明显的速度提升,例如,如果每个目标目录是一个不同的磁盘。
它在功能上也类似于xargs的'-P'参数。