Linux(Centos 7.6)命令详解:xargs

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-file=FILE,从FILE读取参数,而不是标准输入
  • -d, --delimiter=CHARACTER,指定CHARACTER作为分隔符,而不是用空格分隔
  • -E END,如果出现END指定的行,则停止执行(包括END指定的行)
  • -e END, --eof=END,如果指定了END,则相当于-E END;否则,没有文件结束字符串
  • --help,打印帮助信息并退出
  • -I R,与--replace=R 相同(R 必须指定)
  • -i,--replace=R,将初始参数中的R替换为从标准输入读取的名称;如果R未指定,则假定{}
  • -L,-l, --max-lines=MAX-LINES,指定每次调用命令时从输入中读取的最大行数(MAX-LINES),而非默认的按参数数量分割
  • -n, --max-args=MAX-ARGS,控制每次命令执行时传递的参数数量
  • -P, --max-procs=MAX-PROCS,指定同时运行的命令进程的最大数量(MAX-PROCS),默认值为1(串行执行)
  • -p, --interactive,运行命令前提示
  • --process-slot-var=VAR,设置子进程中的环境变量VAR
  • -r, --no-run-if-empty,当标准输入为空时,阻止xargs执行后续命令;默认情况下,即使输入为空,xargs也会执行一次命令(无参数调用)
  • -s, --max-chars=MAX-CHARS,限制命令行参数的总字符数,避免因参数过长导致系统错误
  • --show-limits,显示命令行长度限制;可使用 -s 自定义
  • -t, --verbose,执行命令前打印命令
  • --version,打印版本号
  • -x, --exit,如果超出大小(参见-s)退出

4.常用用例

4.1.多行合并一行

复制代码
[root@node4 ~]# cat a              # 文件内容多行
this
is
a
nice
day
[root@node4 ~]# cat a | xargs      # 转换为一行
this is a nice day 
[root@node4 ~]# 

4.2.指定分隔符,每两个内容输出一行

将"this|is|a|nice|day"按照'|'作为分隔符,并且每两个field作为输出行内容,整体转成列

复制代码
[root@node4 ~]# echo 'this|is|a|nice|day' |xargs -d '|' -n 2   # 最后多一个空行
this is
a nice
day

[root@node4 ~]# 

4.3.kill指定进程名称的进程

kill进程名称为irq相关的进程

复制代码
ps -ef |grep irq |awk '{print $2}' |xargs kill -9

4.4.重命名文件夹

复制代码
将目录中所有文件夹的名称重命名为 xxx_bk ,$NF->打印最后一列
ls -l | grep ^d | awk '{print $NF}' | xargs -tI {} mv {} {}_bk

4.5.将参数传递给后续程序

将匹配的结果传给一个脚本,作为脚本参数运行

复制代码
ls -l | grep ^d | awk '{print $NF}' | xargs -tI {} sh xx.sh {}

注: xargs 通过-I参数,还能再将某个脚本进行传入

4.6.删除文件中的文件列表

复制代码
xargs -a t.txt rm

4.7.每次读取两个参数执行命令

复制代码
xargs -a list.txt -n 2 ls -l

4.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 {} {}.bak

4.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 时出错
相关推荐
牢姐与蒯6 分钟前
Linux信号(二).信号产生续 && 信号保存
linux·运维·服务器·ubuntu
何中应8 分钟前
Jenkins 如何给设置公司 Logo
运维·ci/cd·jenkins
SoStraw9 分钟前
跨平台P2P通信SDK,Windows/Android/iOS/Linux/macOS一套API全兼容
android·linux·windows·跨平台·p2p·webrpc
皓月盈江10 分钟前
WordPress博客迁移到Hexo静态博客教程
linux·服务器·hexo·wordpress·博客迁移·静态博客
Szime11 分钟前
项目结束后,剩余的电子元器件怎么处理?——从“库存滞留”到“资产盘活”的更高解法
运维·嵌入式硬件
中杯可乐多加冰11 分钟前
解决方案:CEB 文件 Web 端在线预览方案,Linux部署ceb文件在线预览工具
linux·运维·前端·ceb
troy12815 分钟前
从 JIRA 到监控:一条完整的 DevOps 交付流水线实战
运维·devops·jira
何中应23 分钟前
Jenkins 如何配置工作节点
运维·ci/cd·jenkins
谢亮_vipxieliang23 分钟前
容器日志收集与管理:从 stdout 规范到 ELK/Loki 落地
运维·网络·人工智能·elk·docker·容器
YOLO数据集集合25 分钟前
风力发电机检测数据集 | 风机检测 电缆塔识别 风电运维 无人机巡检 9122期
运维·人工智能·目标检测·目标跟踪·无人机·风力发电·电力巡检