1.命令作用从标准输入构建和执行命令行(build and execute command lines from standard input)2.命令语法Usage: xargs [OPTION]... COMMAND INITIAL-ARGS...2.1.语法解释运行命令COMMAND并传入参数INITIAL-ARGS以及从输入中读取的其他参数3.参数详解OPTION:不带参数, 列转行-0, --null项之间用空分隔而不是空白(默认)-a, --arg-fileFILE从FILE读取参数而不是标准输入-d, --delimiterCHARACTER指定CHARACTER作为分隔符而不是用空格分隔-E END如果出现END指定的行则停止执行(包括END指定的行)-e [END], --eof[END]如果指定了END则相当于-E END否则没有文件结束字符串--help打印帮助信息并退出-I R与--replaceR 相同(R 必须指定)-i,--replace[R]将初始参数中的R替换为从标准输入读取的名称如果R未指定则假定{}-L,-l, --max-linesMAX-LINES指定每次调用命令时从输入中读取的最大行数(MAX-LINES)而非默认的按参数数量分割-n, --max-argsMAX-ARGS控制每次命令执行时传递的参数数量-P, --max-procsMAX-PROCS指定同时运行的命令进程的最大数量(MAX-PROCS)默认值为1(串行执行)-p, --interactive运行命令前提示--process-slot-varVAR设置子进程中的环境变量VAR-r, --no-run-if-empty当标准输入为空时阻止xargs执行后续命令默认情况下即使输入为空xargs也会执行一次命令(无参数调用)-s, --max-charsMAX-CHARS限制命令行参数的总字符数避免因参数过长导致系统错误--show-limits显示命令行长度限制可使用 -s 自定义-t, --verbose执行命令前打印命令--version打印版本号-x, --exit如果超出大小(参见-s)退出4.常用用例4.1.多行合并一行[rootnode4 ~]# cat a # 文件内容多行 this is a nice day [rootnode4 ~]# cat a | xargs # 转换为一行 this is a nice day [rootnode4 ~]#4.2.指定分隔符每两个内容输出一行将”this|is|a|nice|day”按照’|’作为分隔符并且每两个field作为输出行内容整体转成列[rootnode4 ~]# echo this|is|a|nice|day |xargs -d | -n 2 # 最后多一个空行 this is a nice day [rootnode4 ~]#4.3.kill指定进程名称的进程kill进程名称为irq相关的进程ps -ef |grep irq |awk {print $2} |xargs kill -94.4.重命名文件夹将目录中所有文件夹的名称重命名为 xxx_bk $NF-打印最后一列 ls -l | grep ^d | awk {print $NF} | xargs -tI {} mv {} {}_bk4.5.将参数传递给后续程序将匹配的结果传给一个脚本作为脚本参数运行ls -l | grep ^d | awk {print $NF} | xargs -tI {} sh xx.sh {}注: xargs 通过-I参数还能再将某个脚本进行传入4.6.删除文件中的文件列表xargs -a t.txt rm4.7.每次读取两个参数执行命令xargs -a list.txt -n 2 ls -l4.8.指定结束位置echo file1 file2 STOP file3 | xargs -E STOP echo # 遇到STOP停止则只输出file1 file2 find . -name *.tmp -print | xargs -E .git rm # 遇到 .git 目录时停止删除4.9.批量删除文件有时候需要删除太多日志文件直接删除会报错可以通过如下方式来分批删除find . -name *.log | xargs -L 2 rm # 每次删除最多 2 行匹配的文件路径4.10.多进程处理echo file1 file2 file3 | xargs -P 3 -n 1 touch # 同时启动3个进程分别创建文件 find /var/log -name *.log | xargs -P 4 -I {} gzip {} # 批量压缩日志4.11.提示是否执行find . -name *.tmp | xargs -p rm echo file1 file2 | xargs -p -I{} mv {} {}.bak4.12.限制命令及参数大小find . -name *.log | xargs -s 4096 rm # 单次 rm 命令参数不超过 4096 字符 xargs --show-limits # 显示系统对命令行长度的限制 ls *.txt | xargs -s 2048 echo # 强制分批次处理超长参数4.13.有参数传入才执行find /tmp -name *.log | xargs -r rm # find执行为空时-r 会控制xargs不执行(不报错) find /tmp -name *.log | xargs rm # find执行为空时没有-r xargs会执行一次(报错) awk /pattern/{print $1} | xargs -r wget # 防止 wget 无 URL 时出错
Linux(Centos 7.6)命令详解:xargs
发布时间:2026/6/10 4:51:21
1.命令作用从标准输入构建和执行命令行(build and execute command lines from standard input)2.命令语法Usage: xargs [OPTION]... COMMAND INITIAL-ARGS...2.1.语法解释运行命令COMMAND并传入参数INITIAL-ARGS以及从输入中读取的其他参数3.参数详解OPTION:不带参数, 列转行-0, --null项之间用空分隔而不是空白(默认)-a, --arg-fileFILE从FILE读取参数而不是标准输入-d, --delimiterCHARACTER指定CHARACTER作为分隔符而不是用空格分隔-E END如果出现END指定的行则停止执行(包括END指定的行)-e [END], --eof[END]如果指定了END则相当于-E END否则没有文件结束字符串--help打印帮助信息并退出-I R与--replaceR 相同(R 必须指定)-i,--replace[R]将初始参数中的R替换为从标准输入读取的名称如果R未指定则假定{}-L,-l, --max-linesMAX-LINES指定每次调用命令时从输入中读取的最大行数(MAX-LINES)而非默认的按参数数量分割-n, --max-argsMAX-ARGS控制每次命令执行时传递的参数数量-P, --max-procsMAX-PROCS指定同时运行的命令进程的最大数量(MAX-PROCS)默认值为1(串行执行)-p, --interactive运行命令前提示--process-slot-varVAR设置子进程中的环境变量VAR-r, --no-run-if-empty当标准输入为空时阻止xargs执行后续命令默认情况下即使输入为空xargs也会执行一次命令(无参数调用)-s, --max-charsMAX-CHARS限制命令行参数的总字符数避免因参数过长导致系统错误--show-limits显示命令行长度限制可使用 -s 自定义-t, --verbose执行命令前打印命令--version打印版本号-x, --exit如果超出大小(参见-s)退出4.常用用例4.1.多行合并一行[rootnode4 ~]# cat a # 文件内容多行 this is a nice day [rootnode4 ~]# cat a | xargs # 转换为一行 this is a nice day [rootnode4 ~]#4.2.指定分隔符每两个内容输出一行将”this|is|a|nice|day”按照’|’作为分隔符并且每两个field作为输出行内容整体转成列[rootnode4 ~]# echo this|is|a|nice|day |xargs -d | -n 2 # 最后多一个空行 this is a nice day [rootnode4 ~]#4.3.kill指定进程名称的进程kill进程名称为irq相关的进程ps -ef |grep irq |awk {print $2} |xargs kill -94.4.重命名文件夹将目录中所有文件夹的名称重命名为 xxx_bk $NF-打印最后一列 ls -l | grep ^d | awk {print $NF} | xargs -tI {} mv {} {}_bk4.5.将参数传递给后续程序将匹配的结果传给一个脚本作为脚本参数运行ls -l | grep ^d | awk {print $NF} | xargs -tI {} sh xx.sh {}注: xargs 通过-I参数还能再将某个脚本进行传入4.6.删除文件中的文件列表xargs -a t.txt rm4.7.每次读取两个参数执行命令xargs -a list.txt -n 2 ls -l4.8.指定结束位置echo file1 file2 STOP file3 | xargs -E STOP echo # 遇到STOP停止则只输出file1 file2 find . -name *.tmp -print | xargs -E .git rm # 遇到 .git 目录时停止删除4.9.批量删除文件有时候需要删除太多日志文件直接删除会报错可以通过如下方式来分批删除find . -name *.log | xargs -L 2 rm # 每次删除最多 2 行匹配的文件路径4.10.多进程处理echo file1 file2 file3 | xargs -P 3 -n 1 touch # 同时启动3个进程分别创建文件 find /var/log -name *.log | xargs -P 4 -I {} gzip {} # 批量压缩日志4.11.提示是否执行find . -name *.tmp | xargs -p rm echo file1 file2 | xargs -p -I{} mv {} {}.bak4.12.限制命令及参数大小find . -name *.log | xargs -s 4096 rm # 单次 rm 命令参数不超过 4096 字符 xargs --show-limits # 显示系统对命令行长度的限制 ls *.txt | xargs -s 2048 echo # 强制分批次处理超长参数4.13.有参数传入才执行find /tmp -name *.log | xargs -r rm # find执行为空时-r 会控制xargs不执行(不报错) find /tmp -name *.log | xargs rm # find执行为空时没有-r xargs会执行一次(报错) awk /pattern/{print $1} | xargs -r wget # 防止 wget 无 URL 时出错