我尝试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.txt
file.txt
find
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
这会将文件夹复制到终端当前位置的每个子目录。
我分享它希望它也能帮助其他人。