8

有了xargs,我给出echo了几个要打印的字符串。有没有办法在新行中显示每个给定的字符串?

find . something -print0 | xargs -r0 echo

我确信这非常简单,但显然我找不到合适的关键词来谷歌搜索它。

4

2 回答 2

10

这是echo获得您想要的东西的一种方法。

find . something -print0 | xargs -r0 -n1 echo

-n1告诉xargs每次调用命令时使用 1 个命令行参数(在这种情况下,echo

于 2013-06-19T16:48:18.110 回答
8
find . something -print0 | xargs -r0 printf "%s\n"

显然,find也可以在没有帮助的情况下愉快地每行打印一个xargs,但大概这只是您所追求的一部分。该-r选项是有道理的;printf如果没有要打印的内容,它不会运行命令,xargs与 POSIX 相比,这是 GNU 中一个有用且合理的扩展,POSIXxargs总是要求命令至少运行一次。(与 POSIX 相比, -print0tofind-0optionxargs也是 GNU 扩展。)

现在最常见的是,您不需要使用xargswith,find因为 POSIXfind支持+操作数来代替旧的;to -exec,这意味着您可以编写:

find . something -exec printf '%s\n' {} +

使用时+find收集尽可能多的参数以方便地放在命令行上,并使用这些参数调用命令。printf在这种情况下,使用(or )没有多大意义echo,但通常,这会正确处理参数,每个文件名一个参数,即使文件名包含空格、制表符、换行符和其他尴尬字符。

于 2013-06-19T16:18:08.587 回答