mkdir test_dir test_dir1 test_dir2 test_dir3 touch file1 file2 file3 cp -v file* test_dir*/
这只复制到test_dir3,而不是在test_dir,test_dir1,test_dir2。 为什么?
对于这一点,它只复制到最新的目录,如test_dir4,而不是任何其他direcotry(这是省略它们)。
你有这三个命令
mkdir test_dir test_dir1 test_dir2 test_dir3 touch file1 file2 file3 cp -v file* test_dir*/
假设没有其他文件或目录. 在示例开始之前,最后一行中的通配符会扩展:
cp -v file1 file2 file3 test_dir/ test_dir1/ test_dir2/ test_dir3/
(您可以通过将cp更改为echo cp并观察结果来看到这一点。)您没有告诉我们的是由cp -v生成的诊断消息,它显示了它正在尝试执行的操作,即复制命令中的每个项目但最后一行放入最后一项,因此必须是一个目录:
'file1' -> 'test_dir3/file1' 'file2' -> 'test_dir3/file2' 'file3' -> 'test_dir3/file3' cp: omitting directory 'test_dir/' cp: omitting directory 'test_dir1/' cp: omitting directory 'test_dir2/'
因为cp命令是这样工作的。 如果它有更多的2参数,最后一个参数必须是一个目录,并且之前的每个参数将被复制到。
我想你想要一个更像Windows copy命令的cp ,是的,有这样的工具,尽pipe它们没有被广泛使用。 即使我不得不谷歌。
您的实际目标可以通过一个简单的循环轻松实现:
for i in test_dir*; do cp -v test_file* $i; done
这是第一个看起来更简单。 Bash实际上是一种类似于基本的编程语言,在unix环境中单线命令中执行循环或更复杂的操作是相当普遍的。