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

在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”,以区别于另一组文件。这些文件将在本教程中作为例子使用。

使用内置的读命令

一些shells,如Bash和Zsh,有一个内置的命令叫read,它可以读取输入的内容并将其存储在一个变量中。在下面的例子中,我们将从 “Dir_Example “文件夹中复制大小超过5个字节的文件到目标文件夹中,即

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

在这个例子中,我们使用了带有”-type f “参数的搜索命令来搜索普通文件。参数”-size +5c “用于只查找大小超过5字节的文件。接下来,我们使用搜索命令的输出来给while循环提供信息。然后,内置的read从输入中读取,并将第一个字分配给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)

在这个例子中,我们分别列出了最大的文件和两个FIFO中小于5字节的文件。然后,在awk脚本里面,我们对输出进行格式化,以显示文件的数量。

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命令将内容中含有 “选择 “一词的文件复制到目标文件夹中 —

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

在这个例子中,我们使用find命令来列出dir_example文件夹中的所有文件。然后,我们使用xargs命令向grep命令提供信息,grep命令在这些文件中搜索 “选择 “这个词。题目-l是用来只显示包含该词的文件名的。因此,我们再次使用xargs为cp命令提供动力,将包含 “选择 “一词的文件复制到目标文件夹中。

结论

在本教程中,我们探讨了在Linux中把一个命令的输出作为参数传递给另一个命令的几种方法。我们讨论了管道操作符、重定向操作符、回车符、读命令、命令替换、进程替换和xargs命令的使用。通过了解这些不同的方法,你可以将命令链在一起,只用几个简单的命令就可以完成复杂的操作。这可以大大改善你的工作流程,使任务自动化,使你在使用Linux命令行时更有效率。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Linux 基础