问题描述
我试图用一个命令将文件test.txt
复制到多个目录:
cp ~/test.txt ~/folder1 ~/folder2
但我没有成功。有没有办法在一个命令中执行此操作,以便我可以将文件甚至文件夹复制到多个目录?
最佳解决思路
cp
可以从多个源复制,但无法复制到多个目标。有关详细信息,请参阅man cp
。
我知道唯一可以复制/保存到多个目的地的bash命令是tee
。
你可以在你的情况下使用它,如下所示:
tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt
请注意,tee
还将输入写入标准输出(stdout)。因此,如果您不想这样,可以通过将标准输出重定向到/dev/null
来阻止它,如下所示:
tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt >/dev/null
次佳解决思路
另一种实现复制到多个位置的方法是以下命令:
find dir1 dir2 -exec cp file.txt {} \;
如果dir1或dir2具有您不希望将文件复制到的sub-directories,请添加-maxdepth 0
选项:
find dir1 dir2 -maxdepth 0 -exec cp file.txt {} \;
请注意,这将覆盖dir1
和dir2
中的每个文件以及file.txt
的内容,此外还要复制它。要仅复制file.txt
而不影响这些目录中的其他文件,请告诉find
仅对目录执行操作:
find dir1 dir2 -type d -exec cp file.txt {} \;
第三种解决思路
命令
cp ~/test.txt ~/folder1 ~/folder2
尝试将两个文件(~/test.txt
和~/folder1
)复制到目标folder2
。 (如果~/folder2
存在且是一个目录,您将收到”omitting directory”警告)。
如果要制作文件test.txt
的多个副本,则必须使用循环或多个命令…
for i in ~/folder1 ~/folder2; do cp ~/test.txt $i; done
(…如果文件名中嵌入了空格,请注意,您需要引用)。
要复制整个目录,您必须使用-r
选项:
for i in ~/folder1 ~/folder2; do cp -r ~/folder3 $i; done
这将创建包含所有文件的~/folder1/folder3
和~/folder2/folder3
。
第四种思路
您可以创建帮助脚本,也可以使用xargs
和打印功能(在本例中为echo
):
echo firstDir secondDir | xargs -n 1 cp test
这将使用测试文件作为参数将每个目录作为cp
函数的参数。
第五种思路
经过长时间的搜索,这项工作也像魅力一样!
for dir in *; do [ -d "$dir" ] && cp /path/file.txt "$dir" ; done
这会将file.txt复制到终端中当前位置的每个目录。
for dir in *; do [ -d "$dir" ] && cp -rf /path/folder "$dir" ; done
这会将文件夹复制到终端中当前位置的每个子目录。
我同意它希望它也有助于其他人。