【发布时间】:2011-04-07 12:14:32
【问题描述】:
在 bash 提示符下我可以执行此复制
cp file.txt test1.txt
但是如果我尝试将 file.txt 复制到这样的几个文件中
cp file.txt test{2..4}.txt
我得到错误
cp: 目标`test4.txt' 不是目录
【问题讨论】:
标签: bash bash-completion
在 bash 提示符下我可以执行此复制
cp file.txt test1.txt
但是如果我尝试将 file.txt 复制到这样的几个文件中
cp file.txt test{2..4}.txt
我得到错误
cp: 目标`test4.txt' 不是目录
【问题讨论】:
标签: bash bash-completion
这不是关于 bash,而是关于 cp。如果您为 cp 提供了两个以上的参数,则最后一个参数应该是所有其他参数都将复制到的目录。
for f in test{2..4}.txt ; do cp file.txt $f ; done
【讨论】:
嗯,你必须了解 *nix shell 的工作原理。
在 DOS/Windows 世界中,通配符由程序处理。因此,例如xcopy *.txt *.bak 意味着xcopy 被赋予了两个参数:*.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 命令,这正是Michael 所写的:如果你给cp 多于2 个args,最后一个arg 必须是一个目录。
【讨论】: