我有两个目录,x86_64
和i386
。我想从这两个文件夹中过滤掉测试RPMS,然后将它们放在一个单独的文件夹中。 test_release/{version}-x86_64/x86_64
和test_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
我想念什么吗?
发生错误是因为您的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
构造相比,它将最终运行更多的进程)。