带有bash大括号扩展的cp copy命令

时间:2011-04-07 12:14:32

标签: bash bash-completion

在bash提示符下我可以执行此副本

cp file.txt test1.txt

但如果我尝试将file.txt复制到几个文件中

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

我收到错误

  

cp:target`test4.txt'不是目录

2 个答案:

答案 0 :(得分:11)

这不是关于bash,而是关于cp。如果你为cp提供了两个以上的参数,那么最后一个参数应该是一个要复制所有其他参数的目录。

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

答案 1 :(得分:5)

嗯,你必须了解* 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个args,那么最后一个arg必须是一个目录。