有了xargs
,我给出echo
了几个要打印的字符串。有没有办法在新行中显示每个给定的字符串?
find . something -print0 | xargs -r0 echo
我确信这非常简单,但显然我找不到合适的关键词来谷歌搜索它。
这是echo
获得您想要的东西的一种方法。
find . something -print0 | xargs -r0 -n1 echo
-n1
告诉xargs
每次调用命令时使用 1 个命令行参数(在这种情况下,echo
)
find . something -print0 | xargs -r0 printf "%s\n"
显然,find
也可以在没有帮助的情况下愉快地每行打印一个xargs
,但大概这只是您所追求的一部分。该-r
选项是有道理的;printf
如果没有要打印的内容,它不会运行命令,xargs
与 POSIX 相比,这是 GNU 中一个有用且合理的扩展,POSIXxargs
总是要求命令至少运行一次。(与 POSIX 相比, -print0
tofind
和-0
optionxargs
也是 GNU 扩展。)
现在最常见的是,您不需要使用xargs
with,find
因为 POSIXfind
支持+
操作数来代替旧的;
to -exec
,这意味着您可以编写:
find . something -exec printf '%s\n' {} +
使用时+
,find
收集尽可能多的参数以方便地放在命令行上,并使用这些参数调用命令。printf
在这种情况下,使用(or )没有多大意义echo
,但通常,这会正确处理参数,每个文件名一个参数,即使文件名包含空格、制表符、换行符和其他尴尬字符。