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 时出错
相关推荐
A.说学逗唱的Coke1 小时前
【运维专题】playbooks保姆级使用指南
运维·开发语言·python
shchojj1 小时前
gitlab推送触发jekins编译
运维·gitlab
Java开发追求者1 小时前
oracle解决服务器正常使用但是互联网无法使用问题
运维·服务器·ora-12154·windows监听问题·oracle互联网无法访问
日取其半万世不竭1 小时前
Palworld《幻兽帕鲁》 服务器搜不到怎么办?端口和防火墙排查清单
运维·服务器
大树881 小时前
一滴冷却液,烧掉2000万算力
大数据·运维·服务器·人工智能
xhtdj1 小时前
DuckDB Quack基于 HTTP的客户端 / 服务器协议面向多用户分析
服务器·网络协议·http
日取其半万世不竭1 小时前
Rust《腐蚀》 服务器低成本怎么开?配置、端口和存档避坑
服务器·开发语言·rust
qq_366566502 小时前
内容出海工具链搭建实战:从0到CI/CD自动化
运维·ci/cd·自动化
广州灵眸科技有限公司2 小时前
3Tops NPU + 4核高性能架构:灵眸科技EASY-EAI-PI2开发板,为边缘AI开启“easy模式”
服务器·前端·人工智能·python·科技·深度学习·架构