Linux - Xargs 命令用法
xargs命令:
xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。
1、它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。
2、xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
3、xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs处理,换行和空白将被空格取代。
4、xargs是构建单行命令的重要组件之一。
用法:
1、xargs用作替换工具,读取输入的数据再重新格式化后输出(-n -d)。
定义一个测试文件(多行文本数据):
1 2 3 4 5 6 7 | 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 2 3 | 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 |
-n 选项控制多行输出;-d 选项可自定义定界符/分割符:
1 2 3 4 | echo "nameXnameXnameXname" | xargs -dX -n2 name name name name //以 X 分割,以每行 2 个元素输出 |
2、读取stdin,并将格式化后的参数传递给命令( -I )。
假设有一个命令为sk.sh 和 一个保存参数的文件arg.txt:
1 2 3 4 5 6 7 | echo $* //sk.sh命令内容:打印出所有参数 cat arg.txt //arg.txt文件内容如下 aaa bbb ccc |
-I 选项,使用 -I 指定一个 要被替换的字符串{},在xargs扩展时该字符串会被替换(备注:当 -I 和 xargs 结合使用时每个参数命令都会被执行一次):
1 2 3 4 5 | cat arg.txt | xargs -I {} ./sk.sh -p {} -l -p aaa -l -p bbb -l -p ccc -l |
例:复制所有图片文件到 /data/images 目录下:
1 | ls *.jpg | xargs -n1 -I {} cp {} /data/images |
3、xargs 结合 find 使用
用 rm 删除太多文件时,可能得到一个错误信息:/bin/rm Argument list too long.
用 xargs 去避免这个问题(xargs -0 将 \0 作为定界符):
1 | find . -type f -name "*.log" -print0 | xargs -0 rm -f |
查找所有的 jpg 文件,并全部压缩:
1 | find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz |
4、xargs 其他应用
假如有一个文件包含很多需要下载的URL,则可以:
1 | cat url-list.txt | xargs wget -c |
博客园文作者:Citrusliu
博文地址:https://www.cnblogs.com/citrus
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性