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 时出错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆是浪个

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值