如何将cp只写入最新的目录名称?

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环境中单线命令中执行循环或更复杂的操作是相当普遍的。