用于重定向参数的 shell 语法?

用于重定向参数的 shell 语法?

如果我不想重定向 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详情请参阅。

相关内容