使用Bash花括号扩展的cp复制命令

9

在bash提示符下,我可以执行以下复制操作

cp file.txt test1.txt

但是如果我尝试将file.txt复制到多个文件中,就像这样

cp file.txt test{2..4}.txt

我遇到了错误。

cp: 目标文件 `test4.txt' 不是一个目录

2个回答

17

不是关于bash,而是关于cp命令。如果你向cp命令提供两个以上的参数,最后一个参数应该是将其他所有参数复制到的目录。

for f in test{2..4}.txt ; do cp file.txt $f ; done

6

你需要了解*nix shell的工作原理。

在DOS/Windows世界中,通配符由程序处理。因此,例如xcopy *.txt *.bak,意味着xcopy被给予2个参数:*.txt*.bak。通配符如何被解释完全取决于xcopy

在*nix世界中,通配符由shell处理。类似的命令xcopy *.txt *.bak首先会被扩展,变成xcopy <list of files ending with .txt> <list of files ending with .back>。因此,假设存在file1.txtfile4.txt以及另一个文件old.bak,则该命令将被扩展为xcopy file1.txt file2.txt file3.txt file4.txt old.bak

对于cp命令,正如Michael所写的那样:如果您给cp超过2个参数,则最后一个参数必须是目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接