8

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

cp file.txt test1.txt

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

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

我收到错误

cp:目标“test4.txt”不是目录

4

2 回答 2

15

这不是关于 bash,而是关于 cp。如果您为 cp 提供了两个以上的参数,则最后一个参数应该是一个目录,所有其他参数都将复制到该目录中。

for f in test{2..4}.txt ; do cp file.txt $f ; done
于 2011-04-07T12:18:23.553 回答
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.txtto file4.txt,再加上另一个文件old.bak,命令将扩展为xcopy file1.txt file2.txt file3.txt file4.txt old.bak

对于cp命令,这正是 Michael 所写的:如果您提供cp超过 2 个 args,最后一个 arg 必须是一个目录。

于 2011-04-07T13:49:07.967 回答