在 Linux 上将一个命令的输出作为另一个命令的参数


介绍

在使用 Linux 命令行时,我们经常使用多个命令,这些命令将重要数据作为参数。在本教程中,我们将探讨如何将一个命令的输出作为另一个命令的参数的各种场景。我们将创建一个环境来测试我们的策略,并使用示例来说明每个场景。

准备示例文件

首先,我们需要创建一个名为“dir_example”的目录和另一个名为“target”的目录。这些目录将用于存储本教程中用作示例的文件。

$ mkdir dir_example target

接下来,我们将创建两组文件,一组大小为10 字节,另一组大小为 4 字节。

$ truncate -s 10 dir_example/file{1..3}.this
$ truncate -s 4 dir_example/file{1..2}.not

我们使用truncate命令创建这些文件。这些文件被命名为“file1.this”、“file2.this”等,后缀为“.this”,以区别于另一组文件。这些文件将用作本教程中的示例。

使用内置的 Read 命令

一些 shell(如BashZsh)有一个名为 read 的内置命令,它读取输入的内容并将其存储在一个变量中。在以下示例中,我们将从“Dir_Example”文件夹复制大小大于 5 字节的文件到目标文件夹 -

$ find dir_example/ -type f -size +5c | while read file; do cp "$file" target/; done

在此示例中,我们使用了 search 命令和“-type f”参数来搜索常规文件。“-size +5c”参数用于仅查找大小大于 5 字节的文件。接下来,我们使用 search 命令的输出来馈送 while 循环。内置的 read 然后从输入中读取并将第一个单词分配给 file 变量。最后,使用 file 变量作为cp命令的参数,我们可以将同名文件复制到目标文件夹。

命令替换

一些 shell 具有名为命令替换的机制,该机制允许命令的输出替换命令的名称。在以下示例中,我们将使用此功能将大于 5 字节的文件复制到目标文件夹 -

$ cp $(find dir_example/ -type f -size +5c) target/

在这种情况下,我们使用命令替换将源文件列表作为参数馈送到cp命令。然后,我们将它们复制到最后一个参数中给定的目标文件夹。

进程替换

与前面的场景类似,一些 shell 还有另一种称为进程替换的机制,它将列表的输入或输出绑定到一个FIFO。然后,命令使用此FIFO的名称。在以下示例中,我们将在awk脚本中使用此功能来计算两组文件的大小 -

awk '{hist[ARGIND]++}
END {
   for (i in hist)
      printf "%s records in process substitution %s
", hist[i] , i }' \ <(find dir_example/ -type f -size +5c) \ <(find dir_example/ -type f -size -5c)

在此示例中,我们将最大的文件和小于 5 字节的文件分别列在两个 FIFO 中。然后,在 awk 脚本内部,我们格式化输出以显示文件计数。

xargs 命令

xargs是一个强大的工具,它使用标准输入创建和执行命令行。在下一个示例中,我们将创建一个新的示例文件,并了解我们可以使用xargs命令做什么 -

$ cat - << __EOF > dir_example/file4.this.xargs
This file example
will be check by
the following line:
"choose me"
__EOF

在此示例中,我们创建了一个名为file4.this的文件。接下来,我们将使用xargs命令将内容中包含“choose”一词的文件复制到目标文件夹 -

$ find dir_example/ -type f | xargs grep -l "choose" | xargs -I {} cp {} target/

在此示例中,我们使用 find 命令列出dir_example文件夹中的所有文件。然后,我们使用xargs命令来馈送 grep 命令,该命令在文件中搜索“choose”一词。-l选项用于仅显示包含该单词的文件的名称。因此,我们再次使用xargs来为cp命令提供动力,以将目标文件夹中包含“choose”一词的文件复制。

结论

在本教程中,我们探讨了在 Linux 中将一个命令的输出作为另一个命令的参数的几种方法。我们讨论了管道操作符、重定向操作符、反引号read命令、命令替换、进程替换和xargs命令的使用。通过理解这些不同的方法,您可以将命令链接在一起,并仅使用几个简单的命令执行复杂的操作。这可以极大地改善您的工作流程并自动化任务,使您在使用 Linux 命令行时更高效。

更新于: 2023年1月20日

1K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告