linux命令: xargs

xargs

从标准输出建立并运行命令行


example1

描述:输出当前目录下所有符号链接或经过压缩的ASCII文件并显示

命令:file -Lz * | grep ASCII | cut -f1 -d: | xargs ls -ltr

解释:

file -Lz *:用于查找是符号链接或者经过压缩的文件;

输出结果:

anaconda-ks.cfg: ASCII English text

install.log: ASCII text

insall.log.syslog: ASCII text

mbox: ASCII mail text

grep ASCII:用于搜索包含 "ASCII" 字符的字符串并产生;

输出结果:

anaconda-ks.cfg: ASCII English text

install.log: ASCII text

insall.log.syslog: ASCII text

mbox: ASCII mail text

cut -f1 -d:表示采用冒号作为分隔符,并取出第一列。所以尽显示文件名;

输出结果:
anaconda-ks.cfg

install.log

install.log.syslog

mbox

xargs:将上述列表作为参数进行传递,一次传递一个。

xargs ls -ltr:用于接收输出并对其执行 ls -ltr 命令,命令等价于:

ls -ltr anaconda-ks.cfg

ls -ltr install.log

ls -ltr install.log.syslog

ls -ltr mbox

结果:

大家应该都知道了吧。

xargs 本身虽然没有多大用处,但在与其他命令相结合时,它的功能非常强大。


example2

描述:计算当前目录下各个文件行数:

命令:file * | grep ASCII | cut -f1 -d: | xargs wc -l

解释:(无)

结果:

40 anaconda-ks.cfg

452 install.log

53 install.log.syslog

68 mbox

613 total


example3

描述:用vi打开匹配后的文件

命令:file * | grep ASCII | cut -f1 -d: | xargs vi

解释:

该命令使用 vi 逐个打开文件。当您希望搜索多个文件并打开它们进行编辑时,使用该命令非常方便。

example4

描述:快速重命名目录中的文件。

命令:ls | xargs -i mv {} {}.old

解释:

-i 选项告诉 xargs 用每项的名称替换 {}。


xargs还有几个选项:


-p 选项;它使操作具有可交互性:

命令: file * | grep ASCII | cut -f1 -d: | xargs -p vi

此处的 xarg 要求您在运行每个命令之前进行确认。如果您按下 "y",则执行命令。


-t 选项;使用一个详细模式,显示要运行的命令,是调试过程中一个非常有帮助的选项。

如果传递给 xargs 的输出为空怎么办?考虑以下命令:

命令:file * | grep 12345 | cut -f1 -d: | xargs -t wc -l
wc -l
0

此处,搜索 "12345" 后没有匹配的内容;因此 xargs 的输入均为空,如第二行所示(由于我们使用 -t 这个详细选项而产生的结果)。

-r选项;虽然这可能会有所帮助,但在某些情况下,如果没有要处理的内容,您可能希望停止 xargs;如果是这样,可以使用 -r 选项:
命令: file * | grep 12345 | cut
-f1 -d: | xargs -t -r wc -l

如果没有要运行的内容,该命令退出。

-n选项;修改单个命令行传递的参数个数。例如我们即使向 xargs ls -ltr 传递五个文件,但每次向 ls -ltr 仅传递两个文件。

命令:file * | grep ASCII | cut -f1 -d: | xargs -t -n2 ls -ltr

你可能感兴趣的:(linux命令)