为什么带有 cp 的 xargs 会因递归失败?

为什么带有 cp 的 xargs 会因递归失败?

我正在尝试将文件从一个目录复制到其他目录的整个集合中,以便源目录中的文件集将出现在每个目标目录中。

我正在尝试使用cpwithxargs来实现这一点:

# bash on Ubuntu

$ ls -d exercises/*/test/vendor/ | xargs cp ../Unity-2.5.0/src/unity*

我理解这个命令的意思是:

  • 列出所有匹配的目录exercises/*/test/vendor/
  • 对于列出的每个目录
    • 复制到目录中,匹配的文件../Unity-2.5.0/src/unity*

该目录../Unity-2.5.0/src/unity*不包含任何子目录,仅包含文件 该目录exercises/*/test/vendor/不包含任何子目录,仅包含文件

分别测试此命令的每个部分均能达到预期效果。

然而运行时,命令会cp: -r not specified; omitting directory 'exercises/{exercise-name}/test/vendor/'针对每个目标目录进行输出。

为什么?在我要求它执行的操作中,它在哪里看到目录递归?

需要明确的是,我并不是在寻求其他方法来实现我的目标——我想了解为什么方法不起作用以及我该如何调整工作方法(如果可能的话)。

答案1

哎呀!应该读一下。从我对它的man xargs基本理解来看,它不是立即清晰的,但它试图变得聪明,一次使用多个参数。xargsxargs

为了防止这种情况,我需要添加-n1参数来告诉xargs每次迭代最多使用 1 个参数。

# bash on Ubuntu

$ ls -d exercises/*/test/vendor/ | xargs -n1 cp ../Unity-2.5.0/src/unity*

相关内容