xargs是一个可以在大多数Linux和BSD操作系统中找到的命令,它提供了从标准输入执行命令的能力。Grep和awk接受标准输入的参数,但cp或echo不接受标准输入的参数。它们只接受来自命令行的参数。xargs提供了从命令行提供参数的能力。
向Xargs提供参数
我们将为echo命令提供一些命令参数。echo命令将自动从xargs获取参数。
$ echo pof tut com | xargs echo
限制参数计数
在上一个示例中,我们将所有提供的单词打印在一行中。但在某些情况下,这是不合适的。我们可以使用 -n
参数。在本例中,我们将向 echo
命令。所以每个字都会一行一行地印出来。
$ echo pof tut com | xargs -n 1 echo

这里,对于每一轮xargs,只逐个提供一个命令行参数
具体提供论据
到目前为止,我们已经在命令末尾自动提供了参数。我们可以为参数提供{},它是参数的占位符。
$ ls -1 | xargs file {}

从文件读取输入
到目前为止,我们已经从标准输入读取输入,但是xargs可以从文件读取输入。文件内容将逐行读取并提供给命令。
$ xargs -a myinput echo
提供分隔符
分隔符用于将提供的文本解析为多个部分。通常我们用空格作为分隔符。在某些情况下,可以提供特定字符作为分隔符。在这个例子中,我们使用 ;
作为xargs的分隔符。这将创建三个独立的部分来处理 pof
, tut
和 com .
$ echo "pof;tut;com" | xargs -d ";" echo
每行执行前提示用户
xargs使我们能够逐个执行提供的参数和命令。有时我们可能需要在执行前检查每一行。想想我们用的 rm
命令有很多执行行,我们不想因为它的灾难性结果而犯错误。在这种情况下,我们可以 -p
提示我们的参数。我们有6个文件以 txt
我们想删除其中一些。
$ ls txt* | xargs -p -n 1 rm

执行前打印命令
xargs的另一个有用的调试选项是在执行前打印命令。这将给出与其他命令一起使用xargs时的确切情况。我们也可以将此选项称为详细模式。 --verbose
或 -t
选项可用于此功能。
$ ls -1 | xargs -t file {}

使用Xargs命令查找命令
在这里,我们将使用xargs和find命令创建一个示例。找到所有以结尾的文件。 PNG
然后将结果发送给 xarg
为了删除 rm
.
$ find . -name *.PNG -type f -print | xargs rm {}
带有Grep命令的Xargs命令
在本例中,我们将使用xargs和 grep
命令。我们会搜索的 .c
用于表达式的grep文件 "pass"
$ find . -name *.c -type f -print | xargs grep "pass" {}

Xargs命令和Cp命令
我们可以用 cp
使用xargs命令。在本例中,我们将找到所有c文件并将它们直接复制到/tmp/文件夹中。
$ find project -name "*.c" | xargs cp -t /tmp/
Xargs命令的退出状态
xargs根据命令执行结果提供退出状态代码。退出状态表示为整数。退出状态代码的含义如下所示。
0 if it succeeds123 if any invocation of the command exited with status 1-125124 if the command exited with status 255125 if the command is killed by a signal126 if the command cannot be run127 if the command is not found1 if some other error occurred
相关文章: 如何使用Chmod递归地更改文件和目录权限