Xargs入门与进阶
时间:2022-07-28
本文章向大家介绍Xargs入门与进阶,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
[TOC]
xargs 命令(重要)
描述:它是命令传参过滤器、命令组合工具用作替换工具,读取输入数据重新格式化后输出,它擅长将标准输入数据转换成命令行参数,而且能够处理管道或者stdin并将其转换成特定命令的命令参数
,也可以将单行或多行文本输入转换为其他格式,例如多行变单行以及单行变多行;
- xargs的默认命令是echo,空格是默认定界符
- 意味着通过管道 | 传递给xargs的输入将会包含换行和空白,不过
通过xargs的处理,换行和空白将被空格取代
,也是构建单行命令的重要组件之一
语法选项:
-0 :#将 作为定界符。
-a :#指定一个xargs脚本文件
-n <数字>: #指定每行显示多少列;
-d '定界字符': #指定一个定界符注意必须是单字符;
-I : #指定一个替换字符串{},这个字符串再xargs扩展时会被替换掉,当-I与xargx联合使用的时候每一个参数命令都会被执行一次,类似于find的-ok/-exec选项
-n, --max-args=MAX-ARGS #每个命令最多使用MAX-ARGS参数行
-P, --max-procs=MAX-PROCS #一次运行最多的max-procs进程
-p, --interactive #运行命令前提示
-s, --max-chars=MAX-CHARS #最多将命令限制为MAX-CHARS
-x, --exit #如果超过大小(参见-s),则退出
实际案例:
#定义一个测试文件,内有多行文本数据:
$cat test.txt
a b c d e f
g h i j k l
m n o p q r
s t u v w x y z
#示例1.多行输入单行输出和指定行输出
cat test.txt | xargs
# a b c d e f g h i j k l m n o p q r s t u v w x y z
cat test.txt | xargs -n3 #每行显示3个参数
# a b c
# d e f
# g h i
#示例2.指定一个定界符进行分割
echo "nameXnameXnameXname" | xargs -dX
echo "nameXnameXnameXname" | xargs -dX -n2 #结合n使用
name name
name name
echo "testp-testp-wwwp-www" | xargs -d 'p'
# test -test -www -www
#示例3查找所有不可修改的文件 (对于入侵监测的时候可使用)
find . | xargs -I file lsattr -a file 2>/dev/null | grep '^----i'
WeiyiGeek.示例1
#示例3.读取stdin将格式化后的参数传递给命令
#假设一个命令为 sk.sh 和一个保存参数的文件arg.txt:
#!/bin/bash
echo $* #sk.sh命令内容,打印出所有参数
#arg.txt文件内容:
aaa
bbb
ccc
#可以利用这个来更改ip文本以及脚本参数的传入
cat arg.txt | xargs -I {} ./sk.sh -p {} -l
cat arg.txt | xargs -I {} echo $* "-p123" {}"- l123"
-p aaa -l
-p bbb -l
-p ccc -l
WeiyiGeek.-I于xargs
#示例4. 复制所有图片文件到 /data/images 目录下:
ls *.png *.jpg *.gif | xargs -n1 -I {} cp {} /data/images
#示例5.xargs结合find使用 ,ls -i 排除显示指定的文件
#用rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用xargs去避免这个问题:
find . -type f -name "*.log" -print0 | xargs -n1 --null #换行或者空格分割以-n1有关系
# ./tuned/tuned.log
# ./audit/audit.log
# ./anaconda/anaconda.log
# ./anaconda/X.log
# ./anaconda/program.log
find . -type f -name "*.log" -print0 | xargs -0 -n3
# ./tuned/tuned.log ./audit/audit.log ./anaconda/anaconda.log
# ./anaconda/X.log ./anaconda/program.log ./anaconda/packaging.log
# ./anaconda/storage.log ./anaconda/ifcfg.log ./anaconda/ks-script-ECgRju.log
find . -type f -name "*.log" -print0 | xargs -0 rm -f #每个参数都回执行
#示例6.统计文件信息
find . -type f -name "*.php" -print0 | xargs -0 wc -l #统计一个源代码目录中所有php文件的行数
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz # 查找所有的jpg 文件,并且压缩它们
#示例7.其他补充使用
cat url-list.txt | xargs wget -c #假如你有一个文件包含了很多你希望下载的URL,你能够使用xargs下载所有链接
WeiyiGeek.xargs使用
0x01 进阶使用
示例1.xargs替换字符串来更改ip文本:
#!/bin/bash
XARGX替换url.txt front/back字符
cat url.txt | xargs -I {} echo $* "Url:"{}"/admin/web.jsp" #method 1
awk '{print "Url:"$1"/admin/web.jsp"}' url.txt
# Url:http://192.168.2.2:8080/admin/web.jsp
# Url:http://192.168.2.1:8081/admin/web.jsp
# Url:http://192.168.1.101:80/admin/web.jsp
示例2.xargs脚本并发:
ls | xargs -n 1 -I {} -P ${thread_num} sh -c "/usr/binfs_upload_file /etcfs/client.conf {}"
ls -I '*.yml' | xargs -I {} rm -rf {}
- Swift 3.0介绍
- C++判断char*的指向
- Linux基础(day18)
- Spring Boot搭建Web应用
- 5.7 vim实践
- Effective Modern C++翻译(7)-条款6:当auto推导出意外的类型时,使用显式的类型初始化语义
- 2.3 ls命令
- Effective Modern C++翻译(6)-条款5:auto比显示的类型声明要更好
- 大白话-prototype属性
- Effective Modern C++翻译(5)-条款4:了解如何观察推导出的类型
- Effective Modern C++翻译(4)-条款3:了解decltype
- 大白话-constructor
- Effective Modern C++翻译(3)-条款2:明白auto类型推导
- React Native在Android平台运行gif的解决方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- flink cep 案例之机架温度监控报警
- 详解flink 1.11中的新部署模式-Application模式
- 浙大版《C语言程序设计(第3版)》题目集 习题10-2 递归求阶乘和
- hadoop源码解析之RPC分析
- 存储过程和触发器
- hadoop源码学习之namenode启动
- 浙大版《C语言程序设计(第3版)》题目集 习题10-3 递归实现指数函数
- hadoop2.7.3源码解析之datanode注册和心跳机制
- 审核/审计
- flink教程-聊聊 flink 1.11 中新的水印策略
- 浙大版《C语言程序设计(第3版)》题目集 习题10-4 递归求简单交错幂级数的部分和
- JSP分页显示(前端处理)
- 拓扑排序-HDU2647 Reward
- hadoop2.7.3源码解析之HA架构分析
- hadoop源码解析之hdfs内部结构分析