我正在尝试将文件从一个目录复制到其他目录的整个集合中,以便源目录中的文件集将出现在每个目标目录中。
我正在尝试使用cp
withxargs
来实现这一点:
# 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
基本理解来看,它不是立即清晰的,但它试图变得聪明,一次使用多个参数。xargs
xargs
为了防止这种情况,我需要添加-n1
参数来告诉xargs
每次迭代最多使用 1 个参数。
# bash on Ubuntu
$ ls -d exercises/*/test/vendor/ | xargs -n1 cp ../Unity-2.5.0/src/unity*