为什么find和xargs copy命令适用于一个文件夹而不适用于另一个文件夹?

问题描述 投票:0回答:1

我有两个目录,x86_64i386。我想从这两个文件夹中过滤掉测试RPMS,然后将它们放在一个单独的文件夹中。 test_release/{version}-x86_64/x86_64test_release/{version}-i386/i386分别。

所以我的第一个命令可以正常工作:

find x86_64/ -type f -name '*test*' -o -name '*demo*' -o -name '*log*' |
xargs cp -rt test_release/${RELEASE}-x86_64/x86_64

我的第二个命令是完全相同的,除了文件夹名称不同:

find i386/ -type f -name '*test*' -o -name '*demo*' -o -name '*log*' |
xargs cp -rt test_release/${RELEASE}-i386/i386

仅第二个命令给我错误:

cp: missing file operand

我想念什么吗?

bash unix find xargs
1个回答
0
投票

发生错误是因为您的find命令未返回任何文件。令人失望的是,xargs仍然运行cp,但最终以很少的参数调用它。这样您就会收到错误消息。

GNU xargs具有-r选项,可以解决此特定情况;但更便携,更强大的解决方案是使用find -exec

find i386/ -type f -name '*test*' -o -name '*demo*' -o -name '*log*' \
    -exec cp -rt "test_release/${RELEASE}-i386/i386" {} +

+-exec语句终止符不是完全可移植的,但是如果您拥有cp -t,我想您是在Linux上,或者至少正在使用最新的find(是否为GNU。 ,将+替换为\;是一种解决方法,尽管与同等的xargs构造相比,它将最终运行更多的进程)。

© www.soinside.com 2019 - 2024. All rights reserved.