应用场景

  • 传递参数,从而组合多个命令
  • 分隔数据,避免参数过长
  • 不支持管道的命令

常见用法

基本是配合有输出结果多的命令,例如find、ls

查找所有的jpg 文件并压缩

find . -name *.png -type f -print | xargs tar -cvzf images.tar.gz

删除查找到的日志

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

查找当前目录下所有用户具有读写执行权限的文件,并收回写权限:

find . -perm -7 -print | xargs chmod o-w

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

ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory

批量下载

cat urls.txt | xargs wget

批量查找并替换文本

grep -rl "test" --include="*.txt" ./* | xargs sed -i s/test/1234/g

先用grep查找包含test字符串的文本文件(r表示递归目录,l表示列出文件目录),然后使用sed替换test为1234。sed不支持输入管道,i表示就地修改。如果不使用xargs就要这样写(注意反引号):

sed -i s/test/1234/g `grep "test" -rl --include="*.txt" ./*`

参考

​http://czmmiao.iteye.com/blog/1949225​​​