我有以下命令检查是否添加了任何新文件并自动调用svn add
所有这些文件
svn status | grep -v "^.[ \t]*\..*" | grep "^?" | awk '{print $2}' | xargs svn add
但是当没有文件时,svn add
会导致警告。
如何停止xargs
调用上一个命令不会产生任何值?该解决方案需要与 GNU 和 BSD (Mac OS X) 版本的xargs
.
如果您运行的是 GNU 版本,请使用xargs -r
:
--no-run-if-empty -r 如果标准输入不包含任何非空格,请不要运行该命令。 通常,即使没有输入,该命令也会运行一次。这个选项 是一个 GNU 扩展。
如果您使用 bash,另一种方法是将输出存储在数组中。并且只有在有输出时才运行 svn。
readarray -t OUTPUT < <(exec svn status | grep -v "^.[ \t]*\..*" | grep "^?" | awk '{print $2}')
[[ ${#OUTPUT[@]} -gt 0 ]] && svn add "${OUTPUT[@]}"
我最终使用了这个。不是很优雅,但很有效。
svn status | grep -v "^.[ \t]*\..*" | grep "^?" && svn status | grep -v "^.[ \t]*\..*" | grep "^?" | awk '{print $2}' | xargs svn add
ls /empty_dir/ | xargs -n10 chown root # chown executed every 10 args
ls /empty_dir/ | xargs -L10 chown root # chown executed every 10 lines
ls /empty_dir/ | xargs -i cp {} {}.bak # every {} is replaced with the args from one input line
ls /empty_dir/ | xargs -I ARG cp ARG ARG.bak # like -i, with a user-specified placeholder