ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。 通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。 1、当你使用rm命令去删除很多的文件时,如: ~~~ find ~ -name “*.log” -print -exec rm –f {} \; 你可能会得到错误信息:“/bin/rm Argument list too long – Linux”。 ~~~ 这时可以用xargs来避免这个问题 ~~~ find ~ -name *.log‘ -print0 | xargs -0 rm –f 或者 find ~ -name *.log‘ | xargs rm –f ~~~ 2、获得/etc下所有以.conf结尾的文件。以下命令仅仅为了帮助大家理解如何使用xargs.find命令的输入结果一个接一个的传递给xargs,作为ls -l的参数。 ~~~ find /etc -name "*.conf" | xargs ls -l 或者 find /etc -name "*.conf" -exec ls -l {} \; ~~~ 3、当你想下载一些URL,这些URL都保存在一个文件里,你可以以如下的方式使用xargs命令 ~~~ cat url-list.txt | xargs wget –c ~~~ 4、找出所有的.jpg格式的图片,并将其归档。 ~~~ find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz ~~~ 5、将所有的jpg图片文件复制到外置的硬盘中 ~~~ ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory ~~~ ## 命令详解 ### 简介 之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如: ~~~ find /sbin -perm +700 |ls -l 这个命令是错误的 find /sbin -perm +700 |xargs ls -l 这样才是正确的 ~~~ xargs 以空白字元或断行字元作为分辨,将 stdin 的资料分隔成为 arguments 。 因为是以空白字元作为分隔,所以,如果有一些档名或者是其他意义的名词内含有空白字元的时候, xargs 可能就会误判了。 ### 选项解释 ~~~ -0 当sdtin含有特殊字元时候,将其当成一般字符,像/'空格等 -a file 从文件中读入作为sdtin,(看例一) -e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。(例二) -p 当每次执行一个argument的时候询问一次用户。(例三) -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。(例四) -t 表示先打印命令,然后再执行。(例五) -i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替。(例六) -r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。(例七) -s num 命令行的最好字符数,指的是xargs后面那个命令的最大命令行字符数。(例八) -L num Use at most max-lines nonblank input lines per command line.-s是含有空格的。 -l 同-L -d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符 -x exit的意思,主要是配合-s使用。 -P 修改最大的进程数,默认是1,为0时候为as many as it can ~~~ ### 应用举例 例一 ~~~ cat test #!/bin/sh echo "hello world/n" xargs -a test echo #!/bin/sh echo hello world/n ~~~ 例二 ~~~ cat test #!/bin/sh echo "hello world/n" cat test | xargs -E "echo" echo #!/bin/sh ~~~ 例三 ~~~ cat txt|xargs -p echo echo /bin tao shou kun ff ?...y /bin tao shou kun ff ~~~ 例四 ~~~ cat test | xargs -n 1 echo #!/bin/sh echo hello world/n cat test | xargs echo #!/bin/sh echo hello world/n ~~~ 例五 ~~~ cat test | xargs -t -n 1 echo echo #!/bin/sh #!/bin/sh echo echo echo echo hello world/n hello world/n ~~~ 例六 ~~~ ls | xargs -i mv {} {}.bak ~~~ 例七 ~~~ echo ""|xargs -t mv mv mv: missing file operand Try `mv --help' for more information. echo ""|xargs -t -r mv (直接退出) ~~~ 例八 ~~~ cat test |xargs -i -x -s 14 echo "{}" exp1 exp5 file xargs: argument line too long ~~~ ### 管道和重定向 http://www.cnblogs.com/chengmo/archive/2010/10/21/1856577.html http://www.cnblogs.com/alwayswyy/p/5191137.html