前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Xargs入门与进阶

Xargs入门与进阶

作者头像
全栈工程师修炼指南
发布于 2020-10-26 06:10:35
发布于 2020-10-26 06:10:35
1K00
代码可运行
举报
运行总次数:0
代码可运行

[TOC]

xargs 命令(重要)

描述:它是命令传参过滤器、命令组合工具用作替换工具,读取输入数据重新格式化后输出,它擅长将标准输入数据转换成命令行参数,而且能够处理管道或者stdin并将其转换成特定命令的命令参数,也可以将单行或多行文本输入转换为其他格式,例如多行变单行以及单行变多行;

  • xargs的默认命令是echo,空格是默认定界符
  • 意味着通过管道 | 传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代,也是构建单行命令的重要组件之一

语法选项:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-0 :#将\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),则退出

实际案例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#定义一个测试文件,内有多行文本数据:
$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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#示例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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#示例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文本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/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脚本并发:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ls | xargs -n 1 -I {} -P ${thread_num} sh -c "/usr/binfs_upload_file /etcfs/client.conf {}"
ls -I '*.yml' | xargs -I {} rm -rf {}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux 命令:每日一学,参数传递之xargs命令实践
描述:上一章,我们学习了Linux中查找搜寻文件或目录的相关命令,此章我们学习常常与find命令联合使用,以及在Shell脚本中常用的参数替换 xargs 命令进行实践学习,从而实现更加强大的参数传递和多进程并行执行Linux命令或脚本等
全栈工程师修炼指南
2024/10/11
8080
Linux 命令:每日一学,参数传递之xargs命令实践
Shell脚本之常用Linux命令使用介绍
描述:xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
全栈工程师修炼指南
2022/09/28
1.3K0
Shell脚本之常用Linux命令使用介绍
Linux-xargs命令
它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。
小小工匠
2021/08/16
9300
Linux xargs 命令
xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:
狼啸风云
2019/11/03
1.6K0
Linux命令查找文件或目录 find及结合xargs应用
find 命令可以根据给定的路劲和表达式查找指定的文件或目录。find 参数选项很多,并且支持正则表达式,功能强大。 和管道结合使用可以实现复杂的功能,是系统管理和普通用户必须掌握的命令。
菲宇
2019/06/12
4.4K0
一天一个 Linux 命令(22):xargs 命令
本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/156
joshua317
2021/10/12
2.3K0
xargs 命令入门教程
xargs 是 Unix 系统的一个很有用的命令,但是常常被忽视,很多人不了解它的用法。
iMike
2019/08/13
7510
xargs 命令入门教程
Linux之xargs命令
xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。
AsiaYe
2019/11/06
1.6K0
Linux之xargs命令
Linux Shell 文本处理工具集锦-Grep+xargs
xargs 能够将输入数据转化为特定命令的命令行参数;这样,可以配合很多命令来组合使用。比如grep,比如find;
Yuou
2022/09/26
4410
Linux文本处理详细教程
本节将介绍Linux下使用Shell处理文本时最常用的工具: find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk; 提供的例子和参数都是常用的; 我对shell脚本使用的原则是命令单行书写,尽量不要超过2行; 如果有更为复杂的任务需求,还是考虑python吧;
说故事的五公子
2020/08/10
4.4K0
Linux Shell 文本处理工具集锦
本文将介绍Linux下使用Shell处理文本时最常用的工具:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk; 提供的例子和参数都是最常用和最为实用的; 我对shell脚本使用的原则是命令单行书写,尽量不要超过2行; 如果有更为复杂的任务需求,还是考虑python吧; find 文件查找 查找txt和pdf文件 find . \( -name "*.txt" -o -name "*.pdf" \) -print 正则方式查找.txt和pdf find . -
小小科
2018/05/03
3.4K0
Linux之文件管理及文本处理
文件管理不外乎文件或目录的创建、删除、查询、移动,有mkdir/rm/mv 文件查询是重点,用find来进行查询;find的参数丰富,也非常强大; 有时候,需要给文件创建一个别名,我们需要用到ln,使用这个别名和使用原文件是相同的效果; 2.1. 创建和删除 创建:mkdir 删除:rm 删除非空目录:rm -rf file目录 删除日志 rm *log (等价: $find ./ -name “*log” -exec rm {} ;) 移动:mv 复制:cp (复制目录:cp -r ) 查看当前目录下文件个数: $find ./ | wc -l 复制目录: $cp -r source_dir dest_dir 2.2. 目录切换 找到文件/目录位置:cd 切换到上一个工作目录: cd - 切换到home目录: cd or cd ~ 显示当前路径: pwd 更改当前工作路径为path: $cd path 2.3. 列出目录项 显示当前目录下的文件 ls 按时间排序,以列表的方式显示目录项 ls -lrt 以上这个命令用到的频率如此之高,以至于我们需要为它建立一个快捷命令方式: 在.bashrc 中设置命令别名: alias lsl='ls -lrt' alias lm='ls -al|more' 这样,使用lsl,就可以显示目录中的文件按照修改时间排序;以列表方式显示; 给每项文件前面增加一个id编号(看上去更加整洁): >ls | cat -n 1 a 2 a.out 3 app 4 b 5 bin 6 config 注:.bashrc 在/home/你的用户名/ 文件夹下,以隐藏文件的方式存储;可使用 ls -a 查看; 2.4. 查找目录及文件 find/locate 搜寻文件或目录: $find ./ -name "core*" | xargs file 查找目标文件夹中是否有obj文件: $find ./ -name '*.o' 递归当前目录及子目录删除所有.o文件: $find ./ -name "*.o" -exec rm {} \; find是实时查找,如果需要更快的查询,可试试locate;locate会为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引库: $locate string 寻找包含有string的路径: $updatedb 与find不同,locate并不是实时查找。你需要更新数据库,以获得最新的文件索引信息。 2.5. 查看文件内容 查看文件:cat vi head tail more 显示时同时显示行号: $cat -n 按页显示列表内容: $ls -al | more 只看前10行: $head - 10 ** 显示文件第一行: $head -1 filename 显示文件倒数第五行: $tail -5 filename 查看两个文件间的差别: $diff file1 file2 动态显示文本最新信息: $tail -f crawler.log 2.6. 查找文件内容 使用egrep查询文件内容: egrep '03.1\/CO\/AE' TSF_STAT_111130.log.012 egrep 'A_LMCA777:C' TSF_STAT_111130.log.035 > co.out2 2.7. 文件与目录权限修改 改变文件的拥有者 chown 改变文件读、写、执行等属性 chmod 递归子目录修改: chown -R tuxapp source/ 增加脚本可执行权限: chmod a+x myscript 2.8. 给文件增加别名 创建符号链接/硬链接: ln cc ccAgain :硬连接;删除一个,将仍能找到; ln -s cc ccTo :符号链接(软链接);删除源,另一个无法使用;(后面一个ccTo 为新建的文件) 2.9. 管道和重定向 批处理命令连接执行,使用 | 串联: 使用分号 ; 前面成功,则执行后面一条,否则,不执行:&& 前面失败,则后一条执行: || ls /proc && echo suss! || echo failed. 能够提示命名是否执行成功or失败; 与上述相同效果的是: if ls /proc; then echo suss; else echo fail; fi 重定向: ls proc/*.c > list 2> &l 将标准输出和标准错误重定向
菲宇
2019/06/13
1.9K0
linux之xargs使用技巧
原文链接:https://rumenz.com/rumenbiji/linux-xargs-skills.html
入门笔记
2021/10/21
1.2K0
Sed三剑客入门与进阶
描述:功能强大的流式文本编辑器(流编辑器-Stream editor)进行文本过滤与格式化替换输出,是在进行文本处理中非常实用的工具,能够完美的配合正则表达式使用;
全栈工程师修炼指南
2022/09/28
3.2K0
Sed三剑客入门与进阶
Linux基础知识之xargs命令
昨天在给服务器做年终“大扫除”整理时,发现有个目录下因为文件过多而删除失败,最终使用 xargs 才搞定,于是顺便来记录下。 在执行某些命令时,当 Linux 某个目录下文件过多就会因为“参数列表过长”而报错无法执行。比如,我要清空/var/spool/clientmqueue/下的庞大数量的临时文件,如果直接执行 rm  -f  *,有时就会会出现“参数列表过长”的错误提示,因为 linux 下一般的命令的参数的总长度不能超过 4096 个字节。 这时,xargs 就应该上场了了,由于服务器数量很多,我直
张戈
2018/03/26
1.4K0
Linux之find xargs
exec的问题 参数太长 在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误argument line too long。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。 find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。
入门笔记
2021/03/05
3.1K0
Linux常用命令11 - xargs
xargs 实用程序允许您从标准输入构建和执行命令。 它通常通过管道与其他命令组合使用。
叉叉敌
2020/04/21
1.3K0
Linux好用的管道命令
1)在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
WHYBIGDATA
2023/01/31
9.6K0
Linux好用的管道命令
Shell·xargs命令用法
本文节选自《Netkiller Shell 手札》 3.12. standard input/output 3.12.1. xargs - build and execute command lines from standard input xargs命令用法 3.12.1.1. 格式化 xargs用作替换工具,读取输入数据重新格式化后输出。 定义一个测试文件,内有多行文本数据: cat >> test.txt <<EOF a b c d e f g h i j k l m n o p q r
netkiller old
2018/03/05
1.1K0
Shell利剑之xargs和time
---- xargs 从标准输入中读取内容,并将此内容传递给它要协助的命令,并作为协助命令的参数来执行。 brian@local:~$ echo "1.txt 2.txt 3.txt" | xargs ls 1.txt 2.txt 3.txt 将echo的标准输出作为xargs的输入,并将输入传递给协助命令ls作为参数来执行。 xargs和管道的区别 我们通过cat命令来查看文件1.txt的内容,比如: brian@Dmaster:~$ echo 1.txt | cat 1.txt brian@Dmast
吕海峰
2018/04/03
7010
相关推荐
Linux 命令:每日一学,参数传递之xargs命令实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验