【发布时间】:2012-01-07 23:07:09
【问题描述】:
考虑这个命令:
ls /mydir/*.txt | xargs chown root
目的是将mydir中所有文本文件的所有者更改为root
问题是如果mydir 中没有.txt 文件,那么xargs 会抛出一个错误,指出没有指定路径。这是一个无害的示例,因为正在引发错误,但在某些情况下,例如在我需要在此处使用的脚本中,假定当前目录为空白路径。因此,如果我从/home/tom/ 运行该命令,那么如果ls /mydir/*.txt 没有结果并且/home/tom/ 下的所有文件都将其所有者更改为root。
那么如何让 xargs 忽略空结果?
【问题讨论】:
-
旁白:永远不要将来自
ls的输出用于编程用途;见mywiki.wooledge.org/ParsingLs -
我的用例是
git branch --merged | grep -v '^* ' | xargs git branch -d,在空输入时也会失败 -
我觉得你可以跑
git branch --merged | grep -v '^* ' | xargs --no-run-if-empty git branch -d