我尝试test.txt使用一个命令将文件复制到多个目录:
cp ~/test.txt ~/folder1 ~/folder2
Run Code Online (Sandbox Code Playgroud)
但我没有成功。有没有办法在一个命令中做到这一点,以便我可以将文件甚至文件夹复制到多个目录?
Rad*_*anu 81
cp可以从多个源复制,但不能复制到多个目的地。查看man cp更多信息。
我知道的唯一可以复制/保存到多个目的地的 bash 命令是tee.
您可以在您的情况下使用它,如下所示:
tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt
Run Code Online (Sandbox Code Playgroud)
请注意,tee还将输入写入标准输出 (stdout)。所以如果你不想要这个,你可以通过将标准输出重定向到/dev/null如下来阻止它:
tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt >/dev/null
Run Code Online (Sandbox Code Playgroud)
Syl*_*eau 71
实现复制到多个位置的另一种方法是以下命令:
find dir1 dir2 -exec cp file.txt {} \;
Run Code Online (Sandbox Code Playgroud)
如果 dir1 或 dir2 有您不想将文件复制到的子目录,请添加
-maxdepth 0选项:
find dir1 dir2 -maxdepth 0 -exec cp file.txt {} \;
Run Code Online (Sandbox Code Playgroud)
请注意,除了复制它之外,这还将覆盖包含dir1和dir2包含file.txt内容的每个文件。要仅复制file.txt而不影响这些目录中的其他文件,请告诉find仅对目录进行操作:
find dir1 dir2 -type d -exec cp file.txt {} \;
Run Code Online (Sandbox Code Playgroud)
Rma*_*ano 34
命令
cp ~/test.txt ~/folder1 ~/folder2
Run Code Online (Sandbox Code Playgroud)
尝试将两个文件(~/test.txt和 ~/folder1)复制到目的地folder2。(如果~/folder2存在并且是一个目录,您将收到“省略目录”警告)。
如果要制作文件的多个副本,则test.txt必须使用循环或多个命令...
for i in ~/folder1 ~/folder2; do cp ~/test.txt $i; done
Run Code Online (Sandbox Code Playgroud)
(...如果文件名中嵌入了空格,请小心,您需要引用)。
要复制整个目录,您必须使用该-r选项:
for i in ~/folder1 ~/folder2; do cp -r ~/folder3 $i; done
Run Code Online (Sandbox Code Playgroud)
这将创建~/folder1/folder3并~/folder2/folder3包含所有文件。
Eva*_*lva 27
您可以创建帮助脚本,也可以xargs使用打印功能(在本例中为echo):
echo firstDir secondDir | xargs -n 1 cp test
Run Code Online (Sandbox Code Playgroud)
这将使每个目录作为cp函数的参数,使用测试文件作为参数。
nux*_*nux 10
经过长时间的搜索,这部作品也像一个魅力!
for dir in *; do [ -d "$dir" ] && cp /path/file.txt "$dir" ; done
Run Code Online (Sandbox Code Playgroud)
这会将file.txt复制到终端当前位置的每个目录。
for dir in *; do [ -d "$dir" ] && cp -rf /path/folder "$dir" ; done
Run Code Online (Sandbox Code Playgroud)
这会将文件夹复制到终端中当前位置的每个子目录。
我分享它希望它也能帮助其他人。