在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高; 而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
使用实例:
实例1: 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
命令:
find . -type f -print | xargs file
输出:
[root@localhost test]# ll 总计 312 -rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log -rw-r--r-- 1 root root 0 11-12 22:25 log2013.log -rw-r--r-- 1 root root 0 11-12 22:25 log2014.log drwxr-xr-x 6 root root 4096 10-27 01:58 scf drwxrwxrwx 2 root root 4096 11-12 19:32 test3 drwxrwxrwx 2 root root 4096 11-12 19:32 test4 [root@localhost test]# find . -type f -print | xargs file ./log2014.log: empty ./log2013.log: empty ./log2012.log: ASCII text [root@localhost test]#
实例2:在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中
命令:
find / -name "core" -print | xargs echo "" >/tmp/core.log
输出:
[root@localhost test]# find / -name "core" -print | xargs echo "" >/tmp/core.log [root@localhost test]# cd /tmp [root@localhost tmp]# ll 总计 16 -rw-r--r-- 1 root root 1524 11-12 22:29 core.log drwx------ 2 root root 4096 11-12 22:24 ssh-TzcZDx1766 drwx------ 2 root root 4096 11-12 22:28 ssh-ykiRPk1815 drwx------ 2 root root 4096 11-03 07:11 vmware-root
实例3:在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限
命令:
find . -perm -7 -print | xargs chmod o-w
输出:
[root@localhost test]# ll 总计 312 -rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log -rw-r--r-- 1 root root 0 11-12 22:25 log2013.log -rw-r--r-- 1 root root 0 11-12 22:25 log2014.log drwxr-xr-x 6 root root 4096 10-27 01:58 scf drwxrwxrwx 2 root root 4096 11-12 19:32 test3 drwxrwxrwx 2 root root 4096 11-12 19:32 test4 [root@localhost test]# find . -perm -7 -print | xargs chmod o-w [root@localhost test]# ll 总计 312 -rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log -rw-r--r-- 1 root root 0 11-12 22:25 log2013.log -rw-r--r-- 1 root root 0 11-12 22:25 log2014.log drwxr-xr-x 6 root root 4096 10-27 01:58 scf drwxrwxr-x 2 root root 4096 11-12 19:32 test3 drwxrwxr-x 2 root root 4096 11-12 19:32 test4 [root@localhost test]#
说明:
执行命令后,文件夹scf、test3和test4的权限都发生改变
实例4:用grep命令在所有的普通文件中搜索hostname这个词
命令:
find . -type f -print | xargs grep "hostname"
输出:
[root@localhost test]# find . -type f -print | xargs grep "hostname" ./log2013.log:hostnamebaidu=baidu.com ./log2013.log:hostnamesina=sina.com ./log2013.log:hostnames=true[root@localhost test]#
实例5:用grep命令在当前目录下的所有普通文件中搜索hostnames这个词
命令:
find . -name \* -type f -print | xargs grep "hostnames"
输出:
[root@peida test]# find . -name \* -type f -print | xargs grep "hostnames" ./log2013.log:hostnamesina=sina.com ./log2013.log:hostnames=true[root@localhost test]#
说明:
注意,在上面的例子中, \用来取消find命令中的*在shell中的特殊含义。
实例6:使用xargs执行mv
命令:
find . -name "*.log" | xargs -i mv {} test4
输出:
[root@localhost test]# ll
总计 316
-rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log
-rw-r--r-- 1 root root 61 11-12 22:44 log2013.log
-rw-r--r-- 1 root root 0 11-12 22:25 log2014.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxr-x 2 root root 4096 11-12 22:54 test3
drwxrwxr-x 2 root root 4096 11-12 19:32 test4
[root@localhost test]# cd test4/
[root@localhost test4]# ll
总计 0
[root@localhost test4]# cd ..
[root@localhost test]# find . -name "*.log" | xargs -i mv {} test4
[root@localhost test]# ll
总计 12
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxr-x 2 root root 4096 11-13 05:50 test3
drwxrwxr-x 2 root root 4096 11-13 05:50 test4
[root@localhost test]# cd test4/
[root@localhost test4]# ll
总计 304
-rw-r--r-- 1 root root 302108 11-12 22:54 log2012.log
-rw-r--r-- 1 root root 61 11-12 22:54 log2013.log
-rw-r--r-- 1 root root 0 11-12 22:54 log2014.log
[root@localhost test4]#
实例7:find后执行xargs提示xargs: argument line too long解决方法:
命令:
find . -type f -atime +0 -print0 | xargs -0 -l1 -t rm -f
输出:
[root@pd test4]# find . -type f -atime +0 -print0 | xargs -0 -l1 -t rm -f rm -f [root@pdtest4]#
说明:
-l1是一次处理一个;-t是处理之前打印出命令
实例8:使用-i参数默认的前面输出用{}代替,-I参数可以指定其他代替字符,如例子中的[]
命令:
find . -name "file" | xargs -I [] cp [] ..
输出:
[root@localhost test]# ll 总计 12 drwxr-xr-x 6 root root 4096 10-27 01:58 scf drwxrwxr-x 2 root root 4096 11-13 05:50 test3 drwxrwxr-x 2 root root 4096 11-13 05:50 test4 [root@localhost test]# cd test4 [root@localhost test4]# find . -name "file" | xargs -I [] cp [] .. [root@localhost test4]# ll 总计 304 -rw-r--r-- 1 root root 302108 11-12 22:54 log2012.log -rw-r--r-- 1 root root 61 11-12 22:54 log2013.log -rw-r--r-- 1 root root 0 11-12 22:54 log2014.log [root@localhost test4]# cd .. [root@localhost test]# ll 总计 316 -rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log -rw-r--r-- 1 root root 61 11-13 06:03 log2013.log -rw-r--r-- 1 root root 0 11-13 06:03 log2014.log drwxr-xr-x 6 root root 4096 10-27 01:58 scf drwxrwxr-x 2 root root 4096 11-13 05:50 test3 drwxrwxr-x 2 root root 4096 11-13 05:50 test4 [root@localhost test]#
说明:
使用-i参数默认的前面输出用{}代替,-I参数可以指定其他代替字符,如例子中的[]
实例9:xargs的-p参数的使用
命令:
find . -name "*.log" | xargs -p -i mv {} ..
输出:
[root@localhost test3]# ll
总计 0
-rw-r--r-- 1 root root 0 11-13 06:06 log2015.log
[root@localhost test3]# cd ..
[root@localhost test]# ll
总计 316
-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root 61 11-13 06:03 log2013.log
-rw-r--r-- 1 root root 0 11-13 06:03 log2014.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxr-x 2 root root 4096 11-13 06:06 test3
drwxrwxr-x 2 root root 4096 11-13 05:50 test4
[root@localhost test]# cd test3
[root@localhost test3]# find . -name "*.log" | xargs -p -i mv {} ..
mv ./log2015.log .. ?...y
[root@localhost test3]# ll
总计 0
[root@localhost test3]# cd ..
[root@localhost test]# ll
总计 316
-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root 61 11-13 06:03 log2013.log
-rw-r--r-- 1 root root 0 11-13 06:03 log2014.log
-rw-r--r-- 1 root root 0 11-13 06:06 log2015.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxr-x 2 root root 4096 11-13 06:08 test3
drwxrwxr-x 2 root root 4096 11-13 05:50 test4
[root@localhost test]#
说明:
-p参数会提示让你确认是否执行后面的命令,y执行,n不执行。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# linux
# find
# xargs
# 在Linux上使用xargs命令的详细教程
# Linux xargs命令的使用
# Linux基础之xargs命令的入门实例
# linux中xargs命令的各种使用技巧
# Linux 下xargs命令详解及xargs与管道的区别
# Linux xargs命令详细介绍
# linux shell脚本学习xargs命令使用详解
# Linux xargs命令如何将命令的结果作为参数
# 就会
# 可调
# 让你
# 目录下
# 这就是
# 不像
# 不高
# 只有一个
# 它可以
# 几分钟
# 在上面
# 会为
# 错误信息
# 解决方法
# 太长
# 大家多多
# 而不是
# 情况下
# 在整个
# log
相关文章:
网站制作难吗安全吗,做一个网站需要多久时间?
简单实现Android文件上传
中山网站制作网页,中山新生登记系统登记流程?
建站之星如何快速生成多端适配网站?
如何在Windows 2008云服务器安全搭建网站?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
详解jQuery中基本的动画方法
如何高效完成自助建站业务培训?
建站之星伪静态规则如何设置?
建站OpenVZ教程与优化策略:配置指南与性能提升
如何选择网络建站服务器?高效建站必看指南
定制建站流程步骤详解:一站式方案设计与开发指南
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
如何用好域名打造高点击率的自主建站?
清除minerd进程的简单方法
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
如何零基础开发自助建站系统?完整教程解析
学校建站服务器如何选型才能满足性能需求?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
c++ stringstream用法详解_c++字符串与数字转换利器
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
如何零成本快速生成个人自助网站?
七夕网站制作视频,七夕大促活动怎么报名?
建站之星安装后界面空白如何解决?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
如何在宝塔面板中修改默认建站目录?
如何通过.red域名打造高辨识度品牌网站?
Python文件管理规范_工程实践说明【指导】
建站之星如何助力网站排名飙升?揭秘高效技巧
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
ppt制作免费网站有哪些,ppt模板免费下载网站?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
用v-html解决Vue.js渲染中html标签不被解析的问题
安徽网站建设与外贸建站服务专业定制方案
宝塔新建站点为何无法访问?如何排查?
小建面朝正北,A点实际方位是否存在偏差?
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何在IIS7上新建站点并设置安全权限?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
如何破解联通资金短缺导致的基站建设难题?
建站之星在线版空间:自助建站+智能模板一键生成方案
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
如何零基础在云服务器搭建WordPress站点?
如何生成腾讯云建站专用兑换码?
*请认真填写需求信息,我们会在24小时内与您取得联系。