xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:

find /sbin -perm +700 |ls -l       #这个命令是错误的
find /sbin -perm +700 |xargs ls -l   #这样才是正确的

xargs 一般是和管道一起使用。
命令格式:

somecommand |xargs -item  command

参数:
-a file 从文件中读入作为 stdin
-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 从标准输入一次读取 num 行送给 command 命令。
-l 同 -L。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
-x exit的意思,主要是配合-s使用。。
-P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。
实例
xargs 用作替换工具,读取输入数据重新格式化后输出。
定义一个测试文件,内有多行文本数据:

# cat test.txt
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z

多行输入单行输出:

# cat test.txt | xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z

-n 选项多行输出:

# cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z

-d 选项可以自定义一个定界符:

# echo "nameXnameXnameXname" | xargs -dX
name name name name

结合 -n 选项使用:

# echo "nameXnameXnameXname" | xargs -dX -n2
name name
name name

读取stdin,将格式化后的参数传递给命令
假设一个命令为 sk.sh 和一个保存参数的文件 arg.txt:

#!/bin/bash
#sk.sh命令内容,打印出所有参数。
echo $*

arg.txt文件内容:

# cat arg.txt
aaa
bbb
ccc

xargs 的一个选项 -I,使用 -I 指定一个替换字符串 {},这个字符串在 xargs 扩展时会被替换掉,当 -I 与 xargs 结合使用,每一个参数命令都会被执行一次:

# cat arg.txt | xargs -I {} ./sk.sh -p {} -l
-p aaa -l
-p bbb -l
-p ccc -l

复制所有图片文件到 /data/images 目录下:

ls *.jpg | xargs -n1 -I {} cp {} /data/images

xargs 结合 find 使用
用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 去避免这个问题:

find . -type f -name "*.log" -print0 | xargs -0 rm -f

xargs -0 将 \0 作为定界符。
统计一个源代码目录中所有 php 文件的行数:

find . -type f -name "*.php" -print0 | xargs -0 wc -l

查找所有的 jpg 文件,并且压缩它们:

find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

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

# cat url-list.txt | xargs wget -c

Linux中xargs命令的用法相关推荐

  1. linux命令seq,Linux 中seq 命令的用法

    Linux 中seq 命令的用法 用于产生从某个数到另外一个数之间的所有整数 用法:seq [选项]... 尾数 或:seq [选项]... 首数 尾数 或:seq [选项]... 首数 增量 尾数 ...

  2. linux下的zz命令,linux中cut命令的用法

    本文主要记录一下Linux中cut命令的用法. 1. cut命令使用说明 Usage: cut OPTION... [FILE]... cut命令用于选出FILE文件中每一行的某些部分,然后打印到标准 ...

  3. Linux中read命令的用法

    1. 简单读取 read命令接收标准输入(键盘)的输入或其他文件描述符的输入,得到输入后,read命令将数据放入一个标准变量中.下面是 read命令的最简单形式: bixiaopeng@bixiaop ...

  4. linux的source命令,Linux中source命令的用法

    Linux中source命令的用法 Linux系统中,source命令通常用"."来代替,是一个点命令,与一般的命令有所不同,下面小编就给大家介绍下Linux中source命令的用 ...

  5. linux ldd命令源代码,Linux中ldd命令的用法详解

    Linux中ldd命令主要用于查看程式运行所需的共享库,那么ldd命令具体要如何使用呢?下面小编就给大家介绍下Linux下ldd命令的使用方法,感兴趣的朋友一起来学习下吧. ldd命令用于判断某个可执 ...

  6. php 中find,Linux中find命令的用法汇总

    Linux系统中的 find 命令在查找文件时非常有用而且方便.它可以根据不同的条件来查找文件,例如权限.拥有者.修改日期/时间.文件大小等等.在这篇文章中,我们将学习如何使用 find 命令以及它所 ...

  7. linux中命令date,Linux 中date命令的用法

    关于Linux内置命令date的用法,这里主要说一下,它在shell脚本中如何做日期计算和转换的. 格式化输出日期 详细的格式化符号可以用man date找到,这里以年月日来表示 获得当前的日期: # ...

  8. linux 中的 ln 命令,Linux中ln命令的用法以及分析

    在ubuntu用也有类似于windows中快捷方式这种类型的东西,即链接.这里一般使用ln命令来执行得到,ln命令用法简单,但是与windows不同,这里有硬链接和软链接两种类型的链接.在介绍两种链接 ...

  9. Linux中cron的用法,Linux中cron命令的用法详解

    linux中有一个命令可以定期来执行系统任务.这就是crond服务.下面介绍下crontab命令的用法. linux任务调度的工作主要分为以下两类: 编辑/etc/crontab 文件配置cron c ...

最新文章

  1. AviCAD 2020 Pro v20.0中文版
  2. react-native 安卓支持 gif动态图
  3. 三种会计科目表:运营会计科目表、国家会计科目表、集团会计科目表
  4. win10安装Navicat 12 for MySQL
  5. 数据结构带头结点单向不循环链表(C语言版)
  6. 谈一谈synchronized关键词
  7. 【Breadth-first Search 】934. Shortest Bridge
  8. sql获取受影响行数、插入标识值
  9. Moodle中的角色与权限控制
  10. nginx升级与回退
  11. 此声明没有存储类或类型说明符
  12. oracle e18,oracle 体系结构
  13. CString,string,char*之间的转换
  14. 最大功率点跟踪MPPT
  15. 京东大数据技术白皮书 附下载地址
  16. 计算机应用基础学生指导评语,计算机应用基础评课稿范本
  17. 【Unity3D插件】MiniMap插件分享《小地图插件》
  18. Java关于中查询数据时,报错java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1的问题
  19. python1~10阶乘_阶乘python怎么打
  20. 山东大赛潍坊赛场圆满落幕,优质方案推动智慧城市建设

热门文章

  1. 【Axure学习】(二)Axure遮罩层
  2. mysql用alter修改root密码_mysql修改root密码
  3. 虚拟环境中使用jupyter notebook
  4. python擅长做什么工作_【一点资讯】Python是个什么鬼?为何火遍国内外……
  5. PageRank 算法实现
  6. 利用LSTM实现预测时间序列(股票预测)
  7. 中国电子学会2022年06月份青少年软件编程Scratch图形化等级考试试卷一级真题(含答案)
  8. C++——深拷贝和浅拷贝
  9. 手机定位软件在破案中发挥的作用
  10. 时尚网络达人聊天100句流行英语