xargs应用场景和常见用法
原创
©著作权归作者所有:来自51CTO博客作者小龙在山东的原创作品,请联系作者获取转载授权,否则将追究法律责任
应用场景
- 传递参数,从而组合多个命令
- 分隔数据,避免参数过长
- 不支持管道的命令
常见用法
基本是配合有输出结果多的命令,例如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