Bash如何消除xargs产生的错误信息输出?
消除xargs错误输出的简洁方法
方法1:直接丢弃错误输出
因为你的命令本身能正常执行,只是要屏蔽错误信息,最简单的方式是把xargs的标准错误重定向到/dev/null:
find / -type f | xargs grep -ilIs <regex> 2>/dev/null
2>/dev/null会把所有错误信息(包括单引号不匹配的提示)直接丢弃,不影响正常的查找结果输出。
方法2:用find的-exec替代xargs
彻底避开xargs的引号解析问题,同时避免参数过长错误:
find / -type f -exec grep -ilIs <regex> {} +
-exec ... {} +会自动将find找到的文件分批传递给grep,和xargs的功能类似,但不会处理任何引号或特殊字符,自然消除单引号相关错误,也不会触发参数过长问题。
方法3:修改xargs的分隔符规则
如果坚持用xargs,指定以换行作为分隔符,关闭引号解析:
find / -type f | xargs -d '\n' grep -ilIs <regex>
-d '\n'让xargs仅以换行符分割文件名,不再解析单引号、空格等特殊字符,从根源解决单引号不匹配的错误;若仍出现参数过长,可添加-n 100(数字可按需调整)限制每次传递的文件数量:
find / -type f | xargs -d '\n' -n 100 grep -ilIs <regex>
内容的提问来源于stack exchange,提问作者user5849816
相关产品推荐
相关产品推荐

