2011-04-07 98 views
2

在bash提示符我可以执行这个复制的cp复制命令

cp file.txt test1.txt

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

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

我获取错误

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

回答

9

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

for f in test{2..4}.txt ; do cp file.txt $f ; done 
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.txt存在于file4.txt,再加上另一个文件old.bak,该命令将扩大到xcopy file1.txt file2.txt file3.txt file4.txt old.bak

对于cp命令,这也正是迈克尔写道:如果你给cp超过2 ARGS,最后ARG必须成为一个目录。