xargs的基本用法
xargs作为命令协助符,有很多特别的用处。
xargs 是 execute arguments 的缩写,它的作用是从标准输入中读取内容,并将此内容传递给它要协助的命令,并作为那个命令的参数来执行。
标准输入 -> xargs转换 -> 后续命令(标准输入变为该命令参数)
xags的常见用法有
1. 格式化输出
2. 传递参数
3. 分批执行命令
1. 格式化输出
1.1 多行变单行
定义一个测试文件,内有多行文本数据:
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
1.2 指定数量分行
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
1.3 指定字符分割
-d 选项 可以自定义一个定界符:
echo "nameXnameXnameXname" | xargs -dX name name name name
1.4 指定字符分割并换行
结合 -n 选项 使用:
echo "nameXnameXnameXname" | xargs -dX -n2 name name name name
2. 传递参数
2.1 -p实现命令确认,执行命令先确认
find . -type f |xargs -p rm -f rm -f ./china.txt ./usa.txt ./japan.txt ?...n
2.2 -p,-n实现每个命令都确认
find . -type f |xargs -p -n 1 rm -f rm -f ./china.txt ?...n rm -f ./usa.txt ?...y rm -f ./japan.txt ?...n
2.3 -I实现前面输入参数的别名,方便后续命令书写调用
复制所有图片文件到 /data/images 目录下,{}就是签名参数的别名,方便cp命令调用:
ls *.jpg | xargs -n1 -I{} cp {} /data/images
对目录下的所有文件批量重命名为.bak后缀
ls | xargs -t -I {} mv {} {}.bak
2.4 使用 -I 选项可以让 xargs 执行多个命令
cat foo.txt | xargs -I % sh -c 'echo %; mkdir %' one two three
%是签名输入参数别名,sh -c是解释器,解释执行后面的字符串,执行了echo和mkdir两个命令
3. 分批执行命令
3.1 用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 可以分批执行,解决问题:
find . -type f -name "*.log" -print0 | xargs -0 rm -f
3.2 统计一个源代码目录中所有 php 文件的行数:
find . -type f -name "*.php" -print0 | xargs -0 wc -l
3.3 查找所有的 jpg 文件,并且压缩它们:
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
出处:https://www.cnblogs.com/nul1/p/12123209.html
https://wangchujiang.com/linux-command/c/xargs.html
https://blog.csdn.net/liaowenxiong/article/details/118875087