xargs

执行命令,传递构造的参数列表.
参数通常是一长串文件名(由ls或find生成),它们通过管道传递给xargs

语法

  xargs [options] [command]

选项



   --arg-file=file
   -a file
          从文件而不是标准输入读取项目。
   -0
   --null
            期望文件名由NULL而不是空格终止. 

   --delimiter=delim
   -d delim
           输入项由指定的字符终止。

   -E eof-str
           将文件字符串的结尾设置为eof-str

   --eof[=eof-str]
    -e[eof-str]
            此选项是-E选项的同义词。请改用-E,因为它符合POSIX标准
            而这个选项不是

   --help
            将选项的摘要打印到xargs,然后退出
   -I replace-str
            使用从标准输入读取的名称替换 initial-arguments中出现的replace-str

   --replace[=replace-str]
    -i[replace-str]     如果指定了replace-str,则此选项是-I replace-str的同义词,并且
                        对于-I {}否则。不推荐使用此选项; 使用-I代替。

   -L max-lines
            在命令行中使用最多的非空输入行

   --max-lines[=max-lines]
    -l[max-lines]
           -L选项的同义词。与-L不同,max-lines参数是可选的。
            如果未指定max-lines,则默认为1。不推荐使用-l选项,因为
            POSIX标准指定了-L。

   --max-args=max-args
    -n max-args
            在命令行中最多使用max-args参数。
           如果超过了大小(请参阅-s选项),
           将使用小于max-args参数,除非给出-x选项,在这种情况下xargs将退出。

   -p
   --interactive
           在运行每个命令行之前提示确认

   -P max
   --max-procs=max
            允许一次运行不超过最大进程数。
            默认值为1

   -r
   --no-run-if-empty
           如果标准输入仅包含空格,则不运行命令。

   -s max
   --max-chars=max
            允许每个命令行不超过最大字符数.

   -t
   --verbose
            在执行命令行之前(在标准错误输出上)

   -x
   --exit
           如果超出最大大小(由-s指定),则退出。

   --version
            打印xargs的版本号,然后退出。

退出状态

0   如果成功(命令的所有调用返回退出状态0)
123 如果任何命令调用以状态1-125退出
124 如果命令以255状态退出
125 如果命令被信号杀死
126 如果命令不能运行
127 如果没有找到命令,如果发生其他错误。
如果未找到命令,则运行127;如果发生其他错误,则运行127 。
shell使用大于128的退出代码来指示程序由于致命信号而死亡。

例子

找到音乐文件夹中的所有.mp3文件并传递给ls命令,如果文件名包含空格 则需要-print0:

 $ find ./music -name "*.mp3" -print0 | xargs -0 ls

查找工作文件夹中的所有文件,传递给grep并搜索profit:

$ find ./work -print | xargs grep "profit" 

查找和删除最近30分钟内修改过的文件:

$ find ./work -mmin -30 | xargs -0 rm

删除工作目录中的所有文件:

$ find ./work -print0 | xargs -0 rm

在文件对上运行diff

$ echo $* | xargs -n2 diff

前一行将作为shell脚本调用,将文件名指定为参数
显示文件,每行一个字(与deroff -w相同):

$ cat file | xargs -n1 

从filelist.txt中读取文件名列表(每行一个)并将它们复制到new_folder:

$ xargs -a filelist.txt cp -t new_folder

将olddir中的文件移动到newdir,显示每个命令:

$ ls olddir | xargs -i -t mv olddir/ newdir/

xargs 命令实例:

linux命令:xargs -n1 -P100 -I{} sh -c 'ssh {} uptime >output/{} 2>error/{}' <hostlist <hostlist 2>error/{}' >output/{} uptime {} 'ssh -c sh -I{} -P100 -n1 xargs xargs -n1 -P100 -I{} sh -c 'ssh {} uptime >output/{} 2>error/{}' <hostlistrootopen.com
linux命令:xargs -n1 -P100 -I{} sh -c 'ssh {} uptime >output/{} 2>error/{}' <hostlist <hostlist 2>error/{}' >output/{} uptime {} 'ssh -c sh -I{} -P100 -n1 xargs xargs -n1 -P100 -I{} sh -c 'ssh {} uptime >output/{} 2>error/{}' <hostlistrootopen.com
2018-02-06 04:29:48

linux命令:xargsb() { while read -r cmd; do ${@//'{}'/$cmd}; done; } } done; ${@//'{}'/$cmd}; do cmd; -r read while { xargsb() xargsb() { while read -r cmd; do ${@//'{}'/$cmd}; done; }rootopen.com
linux命令:xargsb() { while read -r cmd; do ${@//'{}'/$cmd}; done; } } done; ${@//'{}'/$cmd}; do cmd; -r read while { xargsb() xargsb() { while read -r cmd; do ${@//'{}'/$cmd}; done; }rootopen.com
2018-05-28 06:10:48

linux命令:xargs -n 2 mv < file_with_colums_of_names file_with_colums_of_names < mv 2 -n xargs xargs -n 2 mv < file_with_colums_of_namesrootopen.com
linux命令:xargs -n 2 mv < file_with_colums_of_names file_with_colums_of_names < mv 2 -n xargs xargs -n 2 mv < file_with_colums_of_namesrootopen.com
2018-06-03 09:54:48

linux命令:xargs < [inputfile] [inputfile] < xargs xargs < [inputfile]rootopen.com
linux命令:xargs < [inputfile] [inputfile] < xargs xargs < [inputfile]rootopen.com
2018-06-09 04:53:48

linux命令:xargs -P 3 -n 1 <COMMAND> < <FILE_LIST> <FILE_LIST> < <COMMAND> 1 -n 3 -P xargs xargs -P 3 -n 1 <COMMAND> < <FILE_LIST>rootopen.com
linux命令:xargs -P 3 -n 1 <COMMAND> < <FILE_LIST> <FILE_LIST> < <COMMAND> 1 -n 3 -P xargs xargs -P 3 -n 1 <COMMAND> < <FILE_LIST>rootopen.com
2018-03-06 10:42:48

linux命令:xargs -0a /proc/27288/cmdline echo echo /proc/27288/cmdline -0a xargs xargs -0a /proc/27288/cmdline echorootopen.com
linux命令:xargs -0a /proc/27288/cmdline echo echo /proc/27288/cmdline -0a xargs xargs -0a /proc/27288/cmdline echorootopen.com
2018-04-22 09:19:48

Linux的Bash命令行(A-Z排序)