当前位置: 首页>>技术问答>>正文


如何使用命令行将文件复制到多个文件夹?

, ,

问题描述

我试图用一个命令将文件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 {} \;

请注意,这将覆盖dir1dir2中的每个文件以及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

这会将文件夹复制到终端中当前位置的每个子目录。

我同意它希望它也有助于其他人。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1211.html,未经允许,请勿转载。