xargs命令

原文:http://www.thegeekstuff.com/2013/12/xargs-examples/
xargs命令和其他命令结合使用是非常有用的.
这篇文章将会通过几个简单的例子来阐述xargs命令的用法,这些例子会帮助你理解xargs命令是怎样工作的,只要你理解了这些基本概念,你就可以写出解决各式各样命令行问题的绝佳例子.
xargs命令的语法格式:

xargs [-0prtx] [-E eof-str] [-e[eof-str]] [–eof[=eof-str]] [null] [-d delimiter] [–delimiter delimiter] [-I replace-str] [-i[replace-str]] [–replace[=replace-str]] [-l[max-lines]] [-L max-lines] [max-lines[=max-lines]] [-n max-args] [max-args=max-args] [-s max-chars] [max-chars=max-chars] [-P max-procs] [max-procs=max-procs] [–interactive] [–verbose] [–exit] [–no-run-if-empty] [–arg-file=file] [–show-limits] [–version] [–help] [command [initial-arguments]]

1.xargs的简单例子
xargs命令从标准输入获得输入(默认),然后对得到的输入执行/bin/echo命令.下面就是你不使用任何参数或者结合其他命令时,使用xargs命令的结果.
当你在字符终端敲xargs命令并不带任何参数时,它会提示你从标准输入键入你想要输入的内容.
这里写图片描述

使用ctrl + D 结束输入后,输入会回显到标准输出,输出如下:

这里写图片描述

2.使用-d选项指定分隔符
任意分割符都可以被使用,所以输入里的每一个字符都可以在xargs命令中使用-d选项按照字面指定.
虽然在上一个例子中,Hi,的后面包含有换行符’\n’,但是回显输出并没有包含换行符’\n’,也就是说,上一个例子的输出,被转换成了单行.
在下面的例子中,当你使用-d\n选项时,它会在输出中保留换行分隔符,显示的输出和键入的内容完全一样.
这里写图片描述

当你键入上述内容之后,按ctrl + D 结束之后,输入会回显到标准输出,输出如下,但是这次保留了换行符.
这里写图片描述

3.使用-n选项限制每行的输出
默认情况下,会像之前解释的那样,xargs会显示任何来自标准输入的内容这里写图片描述

但是可以通过使用-n选项把xargs命令的输出切割成多行.
在下面的例子中,我们使用-n选项,xargs的输出每行只包含3个项目.
这里写图片描述

同样,你可以想下面意向使用-n 2,把xargs的输出切割成每行只包含两个项目.
这里写图片描述

4.使用-p选项在xargs执行之前提醒用户
使用-p选项,你可以决定xargs命令是否需要执行
回想之前的例子,如果我们用户想自己决定/bin/echo命令的执行,我们可以想下面一样使用-p选项来达到目的
这里写图片描述

在下面的输出中,我对所有的echo输出都说no,所以xargs没有执行任何东西.

这里写图片描述

注:这在xargs命令和其他具有破坏性的命令如rm结合使用的时候时非常有用的.因为在这些情况下我们都想知道xargs命令都做了写什么.

5.使用-r选项避免默认为空白输入执行/bin/echo命令

当有一个空白输入的时候(例如没有给xargs命令输入)它会执行一次/bin/echo命令,这会显示新的一行.

这里写图片描述

这里写图片描述

6.使用-t选项打印命令和输出
在下面的例子中,给命令xargs -t 命令输入abcd
这里写图片描述

按下ctrl + D 完成上面的xargs -t命令,这时在显示输出之前会先显示xargs真正执行的命令
在这里,xargs执行的命令是”/bin/echo abcd”
这里写图片描述

7.xargs命令和find命令结合使用
当你像找到确定的文件类型以及对他们进行相应的动作(最常用的是删除),这是xargs命令最重要的使用之一.
xargs和其他命令结合使用时非常高效的.
在下面的例子中,我们把find命令的输出作为xargs命令的输入,但是此时,xargs命令对输入执行的是rm命令,而不是默认的/bin/echo命令.
因此,在这个例子中,find命令输出结果是以.c为扩展名全部文件.这些输出作为xargs命令的输入,反过来,xargs对这些扩展名为.c的文件执行”rm -rf”命令

这里写图片描述

这里写图片描述

8.删除文件名中含有空格符的文件
我们可以看到尽管已经对这个目录下的.c文件执行了rm命令,但是The Geek Stuff.c文件还是没有被删除.这是因为这个文件的文件名包含着空格符.
正如下面的例子显示,rm命令删除了所有扩展名为.c的文件除了文件名中包含空格符的”The Geek Stuff.c”文件.

这里写图片描述

在这种情况下,find 命令使用-print0选项和xargs使用-0选项就可以删除文件名中包含空格符的文件.
这里写图片描述

9.使用-show-limits 选项显示系统对xargs命令的限制
看下面的例子:
下面的例子显示了系统设置的所有限制,这会对xargs的工作方式有一定的影响.

这里写图片描述

10.xargs和grep命令结合使用
xargs命令和grep命令结合使用可以从find命令返回的查找结果中过滤出指定的文件
在下面的例子中,find命令提供的.c文件做为xargs命令的输入
xargs命令执行grep命令去找(find命令提供的文件中)包含字符串”stblib.h”的所有文件

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值