是否可以使用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命令吗?
当前回答
这将复制到直接子目录,如果你想深入,调整-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的建议。
其他回答
不,cp可以复制多个源,但只会复制到单个目标。您需要安排多次调用cp—每个目的地一次—用于您想要做的事情;就像你说的,使用循环或其他工具。
你不能单独使用cp,但你可以将cp和xargs结合起来:
echo dir1 dir2 dir3 | xargs -n 1 cp file1
将file1复制到dir1、dir2和dir3。Xargs将调用cp 3次来完成此操作,详情请参阅Xargs的手册页。
在我看来,你可以使用以下方法:
ls | xargs -n 1 cp -i file.dat
cp命令的-i选项意味着将询问您是否用file.dat覆盖当前目录下的文件。虽然这不是一个完全自动的解决方案,但它为我工作。
如果你想复制多个文件夹到多个文件夹,你可以这样做:
echo dir1 dir2 dir3 | xargs -n 1 cp -r path / toyourdir - {subdir1 subdir2, subdir3}
本质上等同于xargs的答案,但如果你想并行执行:
parallel -q cp file1 ::: /foo/ /bar/
例如,将file1复制到当前文件夹的所有子目录中(包括递归):
parallel -q cp file1 ::: `find -mindepth 1 -type d`
注意:这可能只在非常特定的情况下才会带来明显的速度提升,例如,如果每个目标目录是一个不同的磁盘。
它在功能上也类似于xargs的'-P'参数。