最近我遇到了一个令我惊讶的用例。该问题涉及不返回任何匹配项find ... | xargs ...
的情况。find
在两个系统上进行测试后,我发现其中一个系统的行为符合我的预期:
$ mkdir empty
$ find empty -type f | wc -l
0
$ find empty -type f | xargs echo file
$
但另一个的行为并不像我预期的那样:
$ mkdir empty
$ find empty -type f | wc -l
0
$ find empty -type f | xargs echo file
file
是什么导致了第二种情况下的行为?有办法解决吗?当find
返回零个匹配项时,我想xargs
迭代零次。
答案1
这就是 GNU 版本中 -r 的用途:
-r, --no-run-if-empty
If the standard input does not contain any nonblanks, do not run the command.
Normally, the command is run once even if there is no input. This option is a GNU extension.
在 FreeBSD 上这是默认行为。