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 时出错
相关推荐
pt104342 分钟前
网络自动化Python课程:Cisco PyATS网络自动化测试框架
运维·自动化
Johny_Zhao1 小时前
网络安全等级保护测评实施方案
linux·网络·人工智能·网络安全·信息安全·云计算·等保测评·系统运维·itsm
小袁拒绝摆烂2 小时前
Jenkins部署经验
运维·jenkins
落羽的落羽2 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
刚入门的大一新生2 小时前
Linux-进程控制
linux·运维·服务器·c++
上火的金鱼妹2 小时前
K8S基础组件作用和关系整理
linux·运维·服务器·kubernetes
Vcaker2 小时前
Linux学习25-harbor私有仓库部署
linux·运维·学习
刃神太酷啦3 小时前
Redis 进阶核心:持久化 (RDB/AOF)、事务与主从复制全解析----《Hello Redis!》(5)
linux·c语言·数据库·c++·redis·缓存·bootstrap
编程的一拳超人3 小时前
DeepSeek Harness Linux/macOS/Windows 本地下载、启动与模型配置指南
linux·windows·macos·deepseek
醉颜凉3 小时前
网络安全必学:粘性MAC地址(Sticky MAC)原理与应用全解析
运维·服务器·网络·安全·web安全