如果我不想重定向 stdio,而是想重定向程序的输出作为参数,我应该使用 xargs 吗?
例如,我确实ls
希望文件名成为下一个命令的参数而不是输入流。
有一个很好的例子来说明我正在谈论的内容吗?这个例子很肤浅,但说明了我的意思:使用输出作为ls
参数来cat
显示文件的内容。
答案1
第一的,做不是解析ls
。有许多可靠的方法来获取文件名,但是ls
是不是其中之一。
下面使用 shell 的 globbing 来生成文件名,并将一个以 nul 分隔的文件名列表传递给xargs
运行它们的文件名cat
:
printf '%s\0' * | xargs -0 cat
我知道这样做的目的是演示 files->xargs。当然,否则,除非有太多文件无法容纳在命令行中,否则上面的内容可以替换为:
cat *
更具选择性
ls
和都printf '%s\0' *
将显示目录的所有内容,包括其子目录。如果你想更有选择性,例如,包括常规文件但不包括子目录,那么,正如 cas 所建议的那样,find
是更好的工具:
find . -maxdepth 1 -type f -print0 | xargs -0 cat
或者:
find . -maxdepth 1 -type f -exec cat {} +
find
有许多有用的选项。man find
详情请参阅。