我试图test.txt用一个命令将文件复制到多个目录:
cp ~/test.txt ~/folder1 ~/folder2
但是我没有成功。有没有一种方法可以在一个命令中执行此操作,以便我可以将文件甚至文件夹复制到多个目录?
for dest in folder1 folder2; do cp ~/test.txt ~/"$dest"; done
cp ~/test.txt ~/folder1 && cp ~/test.txt ~/folder2
我试图test.txt用一个命令将文件复制到多个目录:
cp ~/test.txt ~/folder1 ~/folder2
但是我没有成功。有没有一种方法可以在一个命令中执行此操作,以便我可以将文件甚至文件夹复制到多个目录?
for dest in folder1 folder2; do cp ~/test.txt ~/"$dest"; done
cp ~/test.txt ~/folder1 && cp ~/test.txt ~/folder2
Answers:
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
>/dev/null带有二进制文件的作品,而又不会弄乱终端...
-r选项cp
tee与cp仅复制文件的内容而忽略其模式,所有权和时间戳不同。为了避免重复文件名:f=text.txt; <~/$f tee ~/folder1/$f > ~/folder2/$f
以下是将副本复制到多个位置的另一种方法:
find dir1 dir2 -exec cp file.txt {} \;
如果dir1或dir2包含不想将文件复制到的子目录,请添加
-maxdepth 0option:
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 {} \;
find并且两次(在这种情况下)cp。并不是说find需要很多时间。
命令
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包含所有文件。
您可以创建一个帮助脚本,也可以使用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
这会将文件夹复制到终端当前位置的每个子目录中。
我希望它也能帮助其他人。
zsh,您可以用于for i in *(/); ...遍历所有子目录,因此可以避免[ -d ...测试。长时间的全球化是我喜欢它的原因之一bash。
zsh,此答案的第一个命令可以简化为for dir in *(/); do cp /path/file.txt "$dir"; done。参见zsh.sourceforge.net/Intro/intro_2.html
for dir in */;