考虑以下命令:
ls /mydir/*.txt | xargs chown root
目的是将mydir中所有文本文件的所有者更改为root
问题是,如果mydir中没有.txt文件,那么xargs就会出现一个错误,说没有指定路径。这是一个无害的例子,因为会抛出一个错误,但在某些情况下,比如在我需要在这里使用的脚本中,会假设一个空白路径是当前目录。因此,如果我从/home/tom/运行该命令,那么如果ls /mydir/*.txt没有结果,那么/home/tom/下的所有文件都将其所有者更改为root。
如何让xargs忽略空结果呢?
一个跨平台的(Mac和Linux)替代使用-r/——no-run-if-empty xargs的参数:
参数为空的示例(在Ubuntu 18.04和Big Sur上的结果相同):
$ echo | xargs -I {} echo "This is a test with '{}'"
$
$
$ cat /dev/null | xargs -I {} echo "This is a test with '{}'"
$
多行示例:
$ seq 1 5 | xargs -I {} echo "This is a test with '{}'"
This is a test with '1'
This is a test with '2'
This is a test with '3'
This is a test with '4'
This is a test with '5'
$