linux中xargs的用法详解

发布时间 - 2017-08-22 00:00:00    点击率:

xargs在linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活. 

xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.由此 这个命令也是后置引用的一个强有力的替换.在一般使用过多参数的命令替换失败的时候,用xargs来替换它一般都能成功.通常情况下,xargs从管道或 者stdin中读取数据,但是它也能够从文件的输出中读取数据. 

xargs的默认命令是echo.这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代.如: 

bash$ ls -l 

total 0 

-rwxr-xr-x 2 root root 4096 2009-02-23 090218.txt 

-rwxr-xr-x 2 root root 12288 2009-06-08 090607.txt 

bash$ ls -l | xargs 

090218.txt 090607.txt 

bash$ find ~/mail -type f | xargs grep "Linux" 

./misc:User-Agent: slrn/0.9.8.1 (Linux) 

./sent-mail-jul-2005: hosted by the Linux Documentation Project. 

./sent-mail-jul-2005: (Linux Documentation Project Site, rtf version) 

./sent-mail-jul-2005: Subject: Criticism of Bozo's Windows/Linux article 

. . . 

ls | xargs -p -l gzip 使用gzips压缩当前目录下的每个文件,一次压缩一个, 并且在每次压缩前都提示用户. 

注意: 一个有趣的xargs选项是-n NN,NN是限制每次传递进来参数的个数. 

ls | xargs -n 8 echo以每行8列的形式列出当前目录下的所有文件. 

注意: 另一个有用的选项是-0,使用 find -print0 或 grep -lZ 这两种组合方式. 这允许处理包含空白或引号的参数. 

find / -type f -print0 | xargs -0 grep -liwZ GUI | xargs -0 rm -f 

grep -rliwZ GUI / | xargs -0 rm -f 

上边两行都可以用来删除任何包含"GUI"的文件。 

-i 表示 find 传递给xargs的结果 由{}来代替 

-I 我认为是和i差不多,可以这么认为 -i可以用-I {} 来代替 

-p 交互式提问y来确认命令的每次执行。 

-t 在执行前回显各个command 

还有参数-s 和 -x 具体查手册.

下面是另一个示例,我们希望计算这些文件中的行数:

 

$ file * | grep ASCII | cut -d":" -f1 | xargs wc -l

47853 alert_DBA102.log

19 dba102_cjq0_14493.trc

29053 dba102_mmnl_14497.trc

154 dba102_reco_14491.trc

43 dba102_rvwr_14518.trc

77122 total

(注:上述任务还可用以下命令完成:) 

$ wc -l ‘file * | grep ASCII | cut -d":" -f1 | grep ASCII | cut -d":" -f1‘

该 xargs 版本用于阐释概念。Linux 可以用几种方法来完成同一个任务;请使用最适合您的情况的方法。

 

使用该方法,您可以快速重命名目录中的文件。

 

$ ls | xargs -t -i mv {} {}.bak

-i 选项告诉 xargs 用每项的名称替换 {}。-t 选项指示 xargs 先打印命令,然后再执行。

 

另一个非常有用的操作是当您使用 vi 打开要编辑的文件时:

 

$ file * | grep ASCII | cut -d":" -f1 | xargs vi

该命令使用 vi 逐个打开文件。当您希望搜索多个文件并打开它们进行编辑时,使用该命令非常方便。

 

它还有几个选项。最有用的可能是 -p 选项,它使操作具有可交互性:

 

$ file * | grep ASCII | cut -d":" -f1 | xargs -p vi

vi alert_DBA102.log dba102_cjq0_14493.trc dba102_mmnl_14497.trc

dba102_reco_14491.trc dba102_rvwr_14518.trc ?...

此处的 xarg 要求您在运行每个命令之前进行确认。如果您按下 "y",则执行命令。当您对文件进行某些可能有破坏且不可恢复的操作(如删除或覆盖)时,您会发现该选项非常有用。

 

-t 选项使用一个详细模式;它显示要运行的命令,是调试过程中一个非常有帮助的选项。 

如果传递给 xargs 的输出为空怎么办?考虑以下命令:

 

$ file * | grep SSSSSS | cut -d":" -f1 | xargs -t wc -l wc -l 0 $

在此处,搜索 "SSSSSS" 后没有匹配的内容;因此 xargs 的输入均为空,如第二行所示(由于我们使用 -t 这个详细选项而产生的结果)。虽然这可能会有所帮助,但在某些情况下,如果没有要处理的内容,您可能希望停止 xargs;如果是这样,可以使用 -r 选项:

$ file * | grep SSSSSS | cut -d":" -f1 | xargs -t -r wc -l $

如果没有要运行的内容,该命令退出。

 

假设您希望使用 rm 命令(该命令将作为 xargs 命令的参数)删除文件。然而,rm 只能接受有限数量的参数。如果您的参数列表超出该限制怎么办?xargs 的 -n 选项限制单个命令行的参数个数。 

下面显示了如何限制每个命令行仅使用两个参数:即使向 xargs ls -ltr 传递五个文件,但每次向 ls -ltr 仅传递两个文件。

 

$ file * | grep ASCII | cut -d":" -f1 | xargs -t -n2 ls -ltr

ls -ltr alert_DBA102.log dba102_cjq0_14493.trc

-rw-r----- 1 oracle dba 738 Aug 10 19:18 dba102_cjq0_14493.trc

-rw-r--r-- 1 oracle dba 2410225 Aug 13 05:31 alert_DBA102.log

 

ls -ltr dba102_mmnl_14497.trc dba102_reco_14491.trc

-rw-r----- 1 oracle dba 5386163 Aug 10 17:55 dba102_mmnl_14497.trc

-rw-r----- 1 oracle dba 6808 Aug 13 05:21 dba102_reco_14491.trc

 

ls -ltr dba102_rvwr_14518.trc

-rw-r----- 1 oracle dba 2087 Aug 10 04:30 dba102_rvwr_14518.trc

使用该方法,您可以快速重命名目录中的文件。


# linux  # 您的  # 多个  # 可以用  # 您可以  # 如果没有  # 当您  # 命令行  # 重命名  # 换行  # 情况下 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  独立制作一个网站多少钱,建立网站需要花多少钱?  网站图片在线制作软件,怎么在图片上做链接?  网站制作企业,网站的banner和导航栏是指什么?  大连 网站制作,大连天途有线官网?  动图在线制作网站有哪些,滑动动图图集怎么做?  网站建设保证美观性,需要考虑的几点问题!  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  php结合redis实现高并发下的抢购、秒杀功能的实例  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  如何在局域网内绑定自建网站域名?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Python文件操作最佳实践_稳定性说明【指导】  C++时间戳转换成日期时间的步骤和示例代码  ,怎么在广州志愿者网站注册?  如何在香港服务器上快速搭建免备案网站?  如何在建站主机中优化服务器配置?  利用python获取某年中每个月的第一天和最后一天  魔方云NAT建站如何实现端口转发?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Laravel如何实现多对多模型关联?(Eloquent教程)  如何快速建站并高效导出源代码?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  如何用JavaScript实现文本编辑器_光标和选区怎么处理  如何在宝塔面板中创建新站点?  如何用景安虚拟主机手机版绑定域名建站?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何彻底卸载建站之星软件?  Laravel API资源类怎么用_Laravel API Resource数据转换  JavaScript常见的五种数组去重的方式  javascript中闭包概念与用法深入理解  JS中对数组元素进行增删改移的方法总结  奇安信“盘古石”团队突破 iOS 26.1 提权  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel如何为API生成Swagger或OpenAPI文档  Android使用GridView实现日历的简单功能  如何续费美橙建站之星域名及服务?  如何获取PHP WAP自助建站系统源码?  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南