【发布时间】:2013-06-16 06:46:21
【问题描述】:
使用xargs,我给echo 几个字符串打印。有没有办法在换行中显示每个给定的字符串?
find . something -print0 | xargs -r0 echo
我确信这非常简单,但显然我找不到正确的关键词来谷歌它。
【问题讨论】:
使用xargs,我给echo 几个字符串打印。有没有办法在换行中显示每个给定的字符串?
find . something -print0 | xargs -r0 echo
我确信这非常简单,但显然我找不到正确的关键词来谷歌它。
【问题讨论】:
find . something -print0 | xargs -r0 printf "%s\n"
显然,find 也可以在没有xargs 的帮助的情况下愉快地每行打印一个,但大概这只是您所追求的一部分。 -r 选项很有意义;如果没有要打印的内容,它不会运行 printf 命令,与 POSIX xargs 相比,这在 GNU xargs 中是一个有用且明智的扩展,后者始终要求命令至少运行一次。 (与 POSIX 相比,find 的 -print0 选项和 xargs 的 -0 选项也是 GNU 扩展。)
现在最常见的是,您不需要将 xargs 与 find 一起使用,因为 POSIX find 支持 + 操作数来代替旧的 ; 到 -exec,这意味着您可以写:
find . something -exec printf '%s\n' {} +
当使用+ 时,find 会收集尽可能多的参数以方便地放在命令行中,并使用这些参数调用命令。在这种情况下,使用printf(或echo)没有多大意义,但通常,这会正确处理参数,每个文件名一个参数,即使文件名包含空格、制表符、换行符、和其他尴尬的角色。
【讨论】:
-print0
这是echo 获得您想要的东西的一种方式。
find . something -print0 | xargs -r0 -n1 echo
-n1 告诉 xargs 在每次调用命令时使用 1 个命令行参数(在本例中为 echo)
【讨论】: