Linux xargs命令

飞鸿先森 2014-03-03

源:http://www.cnblogs.com/wdpp/archive/2012/02/28/2386683.html

评:

xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。

xargs是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,下面是一些如何有效使用xargs的实用例子。

1.当你尝试用rm删除太多的文件,你可能得到一个错误信息:/bin/rmArgumentlisttoolong.用xargs去避免这个问题

find~-name‘*.log’-print0|xargs-0rm-f

2.获得/etc/下所有*.conf结尾的文件列表,有几种不同的方法能得到相同的结果,下面的例子仅仅是示范怎么实用xargs,在这个例子中实用xargs将find命令的输出传递给ls-l

#find/etc-name"*.conf"|xargsls–l

3.假如你有一个文件包含了很多你希望下载的URL,你能够使用xargs下载所有链接

#caturl-list.txt|xargswget–c

4.查找所有的jpg文件,并且压缩它

#find/-name*.jpg-typef-print|xargstar-cvzfimages.tar.gz

5.拷贝所有的图片文件到一个外部的硬盘驱动

#ls*.jpg|xargs-n1-icp{}/external-hard-drive/directory

EXAMPLES

find/tmp-namecore-typef-print|xargs/bin/rm-f

Findfilesnamedcoreinorbelowthedirectory/tmpanddeletethem.Notethatthiswillworkincorrectlyifthereareanyfilenamescontainingnewlinesorspaces.

find/tmp-namecore-typef-print0|xargs-0/bin/rm-f

Findfilesnamedcoreinorbelowthedirectory/tmpanddeletethem,processingfilenamesinsuchawaythatfileordirectorynamescontainingspacesornewlinesarecorrectlyhandled.

find/tmp-depth-namecore-typef-delete

Findfilesnamedcoreinorbelowthedirectory/tmpanddeletethem,butmoreefficientlythaninthepreviousexample(becauseweavoidtheneedtousefork(2)andexec(2)tolaunchrmandwedon'tneedtheextraxargsprocess).

cut-d:-f1</etc/passwd|sort|xargsecho

Generatesacompactlistingofalltheusersonthesystem.

xargssh-c'emacs"$@"</dev/tty'emacs

LaunchestheminimumnumberofcopiesofEmacsneeded,oneaftertheother,toeditthefileslistedonxargs'standardinput.ThisexampleachievesthesameeffectasBSD's-ooption,butinamoreflexibleandportableway.

相关推荐