在Linux上使用xargs命令的详细教程

大家好,我是良许。

在使用 Linux 时,你是否遇到过需要将一些命令串在一起,但是其中一个命令不接受管道输入的情况呢?在这种情况下,我们就可以使用 xargs 命令。xargs 可以将一个命令的输出作为参数发送给另一个命令。

在 Linux 中,所有标准的应用程序都有与之关联的三个数据流。分别是标准输入流(stdin),标准输出流(stdout)和标准错误流(stderr)。这些流通过文本来运行,我们使用文本将输入(stdin)发送到命令,然后响应(stdout)将会以文本形式显示在终端窗口上。错误消息也以文本的形式显示在终端窗口上(stderr)。

Linux 和类 Unix 操作系统的一大功能是可以将一个命令的标准输出流传递到另一个命令的标准输入流。第一个命令不会管它的输出是否写到了终端窗口,第二个命令也不会管它的输入是否来自键盘。

虽然所有 Linux 命令都有三个标准流,但是并不是所有命令都接受另一个命令的标准输出作为它的标准输入流的输入。因此我们无法通过管道将输入传给这些命令。

xargs是一个使用标准数据流构建执行管道的命令。通过使用xargs命令我们可以使 echormmkdir 等命令接受标准输入作为它们的参数。

xargs命令

xargs接受管道输入,也可以接受来自文件的输入。xargs 使用该输入作为我们指定的命令的参数。如果我们没有给xargs指定特定的命令,则默认使用 echoxargs 始终生成单行输出,即使输入的数据是多行的。

假如我们使用 ls-1(每行列出一个文件)选项,则会得到一列文件名称:

$ ls -1 ./*.sh

这一命令列出了当前目录中的 Shell 脚本文件。

在Linux上使用xargs命令的详细教程

如果我们将输出结果通过管道传递给 xargs ,会得到什么样的效果?

$ ls -1 ./*.sh | xargs

在Linux上使用xargs命令的详细教程

可以看出来,输出以一长串文本的形式写到了终端上。由此可见,xargs 可以将输出作为参数传递给其他命令。

配合wc命令使用xargs

我们可以使用 xargs 命令轻松地让 wc 命令计算多个文件中的单词数,字符数和行数

$ ls *.c | xargs wc

执行结果如下:

在Linux上使用xargs命令的详细教程

命令运行结果显示了每个文件的统计信息以及总数。

这条命令执行了以下操作:

ls列出了所有的 .page 文件,并将该列表传给了xargsxargs 将所有文件名传递给 wcwc 将这些文件名作为命令行参数进行处理。

使用带有确认消息的xargs

我们可以使用 -p(交互)选项来让 xargs 提示我们是否要进行下一步的操作。

如果我们通过 xargs 将一串文件名的字符串传递给 touch 命令,touch 将创建这些文件。

$ echo 'one two three' | xargs -p touch

在Linux上使用xargs命令的详细教程

终端上显示将要执行的命令,xargs 等待我们输入 yYnN 并按 Enter 来响应。如果只按了 Enter ,则视为 n。只有当我们当输入 yY 时才执行该命令。

我们按下y和 Enter ,然后使用ls用来检查文件是否已经创建。

$ ls>在Linux上使用xargs命令的详细教程

在Linux上使用xargs命令的详细教程

扫一扫手机访问