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

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

我尝试test.txt使用一个命令将文件复制到多个目录:

cp ~/test.txt ~/folder1 ~/folder2

但我没有成功。有没有办法用一个命令来完成这个操作,以便我可以将文件甚至文件夹复制到多个目录?

答案1

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

答案2

实现复制到多个位置的另一种方法是以下命令:

find dir1 dir2 -exec cp file.txt {} \;

如果 dir1 或 dir2 有子目录,您不想将文件复制到其中,请添加 -maxdepth 0选项:

find dir1 dir2 -maxdepth 0 -exec cp file.txt {} \;

请注意,除了复制内容外,这还会覆盖dir1和内容dir2中的每个文件。要仅复制而不影响这些目录中的其他文件,请指示仅对目录执行操作:file.txtfile.txtfind

find dir1 dir2 -type d -exec cp file.txt {} \;

答案3

命令

cp ~/test.txt ~/folder1 ~/folder2

尝试将两个文件(~/test.txt~/folder1)复制到目标folder2。(如果~/folder2存在并且是目录,则会出现“省略目录”警告)。

如果您想复制该文件的多个副本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包含所有文件。

学到了8几年后:请注意,文件名中必须小心空格。如果有空格,请将其更改为$i"$i"并小心引用它们)。

答案4

经过长时间的搜索,这项工作也像魔法一样!

for dir in *; do [ -d "$dir" ] && cp /path/file.txt "$dir" ; done

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

for dir in *; do [ -d "$dir" ] && cp -rf /path/folder "$dir" ; done

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

我分享它希望它也能帮助其他人。

相关内容