【发布时间】:2012-11-30 18:46:06
【问题描述】:
我正在尝试使用以下命令在目录中搜索字符串"rGEO":
find . -name "*" -type f -print | xargs grep "rGEO"
./home/oper1/AgencyTape/geo/exe/gngeo.cmd:${WEB_DIR}/exe/web_reports.sh -aGN -d${prev_ccyy}${prev_mm} -rGEO -nomail
在这种情况下,我会取回具有匹配行的文件名,以及与上述字符串匹配的行。
find . -name "*" -type f -exec grep "rGEO" {} \;
在这种情况下,我回来了:
${WEB_DIR}/exe/web_reports.sh -aGN -d${prev_ccyy}${prev_mm} -rGEO -nomail
不打印包含该行的文件 - 而且,如您所见,两个输出之间存在很大差异。
使用xargs 可以提供更清晰和精确的输出。
我的问题是:这两个命令有什么区别?对我来说,他们似乎在执行相同的逻辑,但得到不同的结果。
【问题讨论】:
-
不是Which is faster, 'find -exec' or 'find | xargs -0'? 的完全重复,因为这询问了差异并且该问题询问了哪个更快,但不同之处在于
xargs批量调用命令,而find -exec调用每个结果命令一次,这使得xargs更快。 -
更重要的是:
find -exec与find -print0 |xargs -0n1几乎相同,因为-n1确保每个结果调用一次。