考虑这个命令:
ls /mydir/*.txt | xargs chown root
目的是将所有文本文件的所有者更改mydir为 root
mydir
问题是,如果其中没有.txt文件,mydir则 xargs 会抛出一个错误,指出没有指定路径。这是一个无害的示例,因为正在引发错误,但在某些情况下,例如在我需要在此处使用的脚本中,假定当前目录为空白路径。因此,如果我从那时起运行该命令,/home/tom/如果没有结果ls /mydir/*.txt并且所有文件/home/tom/都将其所有者更改为 root。
.txt
/home/tom/
ls /mydir/*.txt
那么我怎样才能让 xargs 忽略一个空结果呢?
对于 GNU xargs,您可以使用-ror--no-run-if-empty选项:
xargs
-r
--no-run-if-empty
--no-run-if-empty -r 如果标准输入不包含任何非空格,请不要运行该命令。通常,即使没有输入,该命令也会运行一次。此选项是 GNU 扩展。
在 macOS 上使用的 BSD 版本xargs不会为空输入运行命令,因此-r不需要该选项(该版本也不接受它xargs)。