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

  find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

  在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高; 而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。

使用实例:

实例1: 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件

命令:

  find . -type f -print | xargs file

输出:

  1. [root@localhost test]# ll
  2.  
  3. 总计
  4.  
  5. -rw-r--r-- root root - : log2012.log
  6.  
  7. -rw-r--r-- root root - : log2013.log
  8.  
  9. -rw-r--r-- root root - : log2014.log
  10.  
  11. drwxr-xr-x root root - : scf
  12.  
  13. drwxrwxrwx root root - : test3
  14.  
  15. drwxrwxrwx root root - : test4
  16.  
  17. [root@localhost test]# find . -type f -print | xargs file
  18.  
  19. ./log2014.log: empty
  20.  
  21. ./log2013.log: empty
  22.  
  23. ./log2012.log: ASCII text
  24.  
  25. [root@localhost test]#

实例2:在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中

命令:

   find / -name "core" -print | xargs echo "" >/tmp/core.log

输出:

  1. [root@localhost test]# find / -name "core" -print | xargs echo "" >/tmp/core.log
  2.  
  3. [root@localhost test]# cd /tmp
  4.  
  5. [root@localhost tmp]# ll
  6.  
  7. 总计
  8.  
  9. -rw-r--r-- root root - : core.log
  10.  
  11. drwx------ root root - : ssh-TzcZDx1766
  12.  
  13. drwx------ root root - : ssh-ykiRPk1815
  14.  
  15. drwx------ root root - : vmware-root

实例3:在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限

命令:

  find . -perm -7 -print | xargs chmod o-w

输出:

  1. [root@localhost test]# ll
  2.  
  3. 总计
  4.  
  5. -rw-r--r-- root root - : log2012.log
  6.  
  7. -rw-r--r-- root root - : log2013.log
  8.  
  9. -rw-r--r-- root root - : log2014.log
  10.  
  11. drwxr-xr-x root root - : scf
  12.  
  13. drwxrwxrwx root root - : test3
  14.  
  15. drwxrwxrwx root root - : test4
  16.  
  17. [root@localhost test]# -print | xargs chmod o-w
  18.  
  19. [root@localhost test]# ll
  20.  
  21. 总计
  22.  
  23. -rw-r--r-- root root - : log2012.log
  24.  
  25. -rw-r--r-- root root - : log2013.log
  26.  
  27. -rw-r--r-- root root - : log2014.log
  28.  
  29. drwxr-xr-x root root - : scf
  30.  
  31. drwxrwxr-x root root - : test3
  32.  
  33. drwxrwxr-x root root - : test4
  34.  
  35. [root@localhost test]#

说明:

  执行命令后,文件夹scf、test3和test4的权限都发生改变

实例4:用grep命令在所有的普通文件中搜索hostname这个词

命令:

  find . -type f -print | xargs grep "hostname"

输出:

  1. [root@localhost test]# find . -type f -print | xargs grep "hostname"
  2.  
  3. ./log2013.log:hostnamebaidu=baidu.com
  4.  
  5. ./log2013.log:hostnamesina=sina.com
  6.  
  7. ./log2013.log:hostnames=true[root@localhost test]#

实例5:用grep命令在当前目录下的所有普通文件中搜索hostnames这个词

命令:

  find . -name \* -type f -print | xargs grep "hostnames"

输出:

  1. [root@peida test]# find . -name \* -type f -print | xargs grep "hostnames"
  2.  
  3. ./log2013.log:hostnamesina=sina.com
  4.  
  5. ./log2013.log:hostnames=true[root@localhost test]#

说明:

  注意,在上面的例子中, \用来取消find命令中的*在shell中的特殊含义。

实例6:使用xargs执行mv 

命令:

  find . -name "*.log" | xargs -i mv {} test4

输出:

  1. [root@localhost test]# ll
  2.  
  3. 总计
  4.  
  5. -rw-r--r-- root root - : log2012.log
  6.  
  7. -rw-r--r-- root root - : log2013.log
  8.  
  9. -rw-r--r-- root root - : log2014.log
  10.  
  11. drwxr-xr-x root root - : scf
  12.  
  13. drwxrwxr-x root root - : test3
  14.  
  15. drwxrwxr-x root root - : test4
  16.  
  17. [root@localhost test]# cd test4/
  18.  
  19. [root@localhost test4]# ll
  20.  
  21. 总计 [root@localhost test4]# cd ..
  22.  
  23. [root@localhost test]# find . -name "*.log" | xargs -i mv {} test4
  24.  
  25. [root@localhost test]# ll
  26.  
  27. 总计 12drwxr-xr-x root root - : scf
  28.  
  29. drwxrwxr-x root root - : test3
  30.  
  31. drwxrwxr-x root root - : test4
  32.  
  33. [root@localhost test]# cd test4/
  34.  
  35. [root@localhost test4]# ll
  36.  
  37. 总计
  38.  
  39. -rw-r--r-- root root - : log2012.log
  40.  
  41. -rw-r--r-- root root - : log2013.log
  42.  
  43. -rw-r--r-- root root - : log2014.log
  44.  
  45. [root@localhost test4]#

实例7:find后执行xargs提示xargs: argument line too long解决方法:

命令:

  find . -type f -atime +0 -print0 | xargs -0 -l1 -t rm -f

输出:

  1. [root@pd test4]# -print0 | -l1 -t rm -f
  2.  
  3. rm -f
  4.  
  5. [root@pdtest4]#

说明:

  -l1是一次处理一个;-t是处理之前打印出命令

实例8:使用-i参数默认的前面输出用{}代替,-I参数可以指定其他代替字符,如例子中的[] 

命令:

输出:

  1. [root@localhost test]# ll
  2.  
  3. 总计 12drwxr-xr-x root root - : scf
  4.  
  5. drwxrwxr-x root root - : test3
  6.  
  7. drwxrwxr-x root root - : test4
  8.  
  9. [root@localhost test]# cd test4
  10.  
  11. [root@localhost test4]# find . -name "file" | xargs -I [] cp [] ..
  12.  
  13. [root@localhost test4]# ll
  14.  
  15. 总计
  16.  
  17. -rw-r--r-- root root - : log2012.log
  18.  
  19. -rw-r--r-- root root - : log2013.log
  20.  
  21. -rw-r--r-- root root - : log2014.log
  22.  
  23. [root@localhost test4]# cd ..
  24.  
  25. [root@localhost test]# ll
  26.  
  27. 总计
  28.  
  29. -rw-r--r-- root root - : log2012.log
  30.  
  31. -rw-r--r-- root root - : log2013.log
  32.  
  33. -rw-r--r-- root root - : log2014.log
  34.  
  35. drwxr-xr-x root root - : scf
  36.  
  37. drwxrwxr-x root root - : test3
  38.  
  39. drwxrwxr-x root root - : test4
  40.  
  41. [root@localhost test]#

说明:

  使用-i参数默认的前面输出用{}代替,-I参数可以指定其他代替字符,如例子中的[]

实例9:xargs的-p参数的使用 

命令:

  find . -name "*.log" | xargs -p -i mv {} ..

输出:

  1. [root@localhost test3]# ll
  2.  
  3. 总计
  4.  
  5. -rw-r--r-- root root - : log2015.log
  6.  
  7. [root@localhost test3]# cd ..
  8.  
  9. [root@localhost test]# ll
  10.  
  11. 总计
  12.  
  13. -rw-r--r-- root root - : log2012.log
  14.  
  15. -rw-r--r-- root root - : log2013.log
  16.  
  17. -rw-r--r-- root root - : log2014.log
  18.  
  19. drwxr-xr-x root root - : scf
  20.  
  21. drwxrwxr-x root root - : test3
  22.  
  23. drwxrwxr-x root root - : test4
  24.  
  25. [root@localhost test]# cd test3
  26.  
  27. [root@localhost test3]# find . -name "*.log" | xargs -p -i mv {} ..
  28.  
  29. mv ./log2015.log .. ?...y
  30.  
  31. [root@localhost test3]# ll
  32.  
  33. 总计 [root@localhost test3]# cd ..
  34.  
  35. [root@localhost test]# ll
  36.  
  37. 总计
  38.  
  39. -rw-r--r-- root root - : log2012.log
  40.  
  41. -rw-r--r-- root root - : log2013.log
  42.  
  43. -rw-r--r-- root root - : log2014.log
  44.  
  45. -rw-r--r-- root root - : log2015.log
  46.  
  47. drwxr-xr-x root root - : scf
  48.  
  49. drwxrwxr-x root root - : test3
  50.  
  51. drwxrwxr-x root root - : test4
  52.  
  53. [root@localhost test]#

说明:

  -p参数会提示让你确认是否执行后面的命令,y执行,n不执行。

linux常用命令:find命令之xargs的更多相关文章

  1. ## 本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘

    本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘一,磁盘管理1.显示当前目录位置 pwd2.切换目录 cd ...

  2. Linux 常用的压缩命令有 gzip 和 zip

    Linux 常用的压缩命令有 gzip 和 zip,两种压缩包的结尾不同:zip 压缩的后文件是 *.zip ,而 gzip 压缩后的文件 *.gz 相应的解压缩命令则是 gunzip 和 unzip ...

  3. LINUX常用配置及命令

    一.   Fedora系统配置 1.      [设置网卡IP] 步骤如下: 1)     用root用户登陆,打开/etc/sysconfig/network-scripts/ifcfg-eth0文 ...

  4. Linux常用的基础命令总结

    man 查看英文命令帮助   可以看作--help 拷贝目录的命令cp -a  包含所有 ls -a 显示所有文件包括隐藏文件  -ld ls -F 过滤目录文件(给不同类型文件结尾加上不同的符号) ...

  5. Java线上问题排查思路及Linux常用问题分析命令学习

    前言 之前线上有过一两次OOM的问题,但是每次定位问题都有点手足无措的感觉,刚好利用星期天,以测试环境为模版来学习一下Linux常用的几个排查问题的命令. 也可以帮助自己在以后的工作中快速的排查线上问 ...

  6. linux常用60条命令 转

    Linux必学的60个命令   Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命 ...

  7. 入门学习Linux常用必会命令实例详解

    Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统, ...

  8. 网络编程学习笔记-linux常用的网络命令

    网络参数设置命令 所有时刻如果你想要做好自己的网络参数设置,包括IP参数.路由参数和无线网络等,就得要了解下面这些相关的命令才行.其中Route及ip这两条命令是比较重要的.当然,比较早期的用法,我们 ...

  9. linux常用20条命令

    1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: cd /root/Docements # 切换到 ...

  10. linux常用配置文件和命令总结

    常用配置文件说明: 1..设置-n永远生效:Vim的配置文件:命令模式想永久生效, ~/.vimrc,新建文件,在里面输入保存即可 2.设置别名永远生效:在~/.bashrc  修改当前用户家目录里的 ...

随机推荐

  1. iOS - 获取安装所有App的Bundle ID

    先导入#import <objc/runtime.h>头文件 使用runtime获取设备上的所有app的bundle id // Class LSApplicationWorkspace_ ...

  2. 基于pandas python sklearn 的美团某商家的评论分类(文本分类)

    美团店铺评价语言处理以及分类(NLP) 第一篇 数据分析部分 第二篇 可视化部分, 本文是该系列第三篇,文本分类 主要用到的包有jieba,sklearn,pandas,本篇博文主要先用的是词袋模型( ...

  3. Integral transform 积分变换

    总结: 1.为了更加便于求解,将方程从原域映射到另外一个域 Integral transform - Wikipedia https://en.wikipedia.org/wiki/Integral_ ...

  4. ddt ddl dml

    data-definition language 数据定义语言 data-manipulation language 数据操纵语言 data type definition 文档类型定义

  5. django比较相等或者不相等的模板语法ifequal / ifnotequal

    转自:http://blog.csdn.net/goupper1991/article/details/50768346 ifequal / ifnotequal      在模板语言里比较两个值并且 ...

  6. <!DOCTYPE html>有什么用?

    <!DOCTYPE html> 是文档声明,必须放在文档第一行,它的作用就是告诉浏览器以哪个html版本来解析你的html代码.当你不写声明的时候,浏览器就会以自己的怪异模式来解析你的ht ...

  7. SEO工作中如何增加用户体验?10个细节要注意!

    我们一直在做的网站SEO工作,如果你认为它的目的仅仅是为了提高网站的排名那就错了,还有一个同样很重要的方面就是增加用户的体验,使网站更加符合网民的浏览习惯,需要做到这个方面的成功我们有10个小细节是需 ...

  8. Ubuntu下安装vsftpd

    1.sudo apt-get install vsftpd 2.修改配置文件 sudo gedit /etc/vsftpd.conf write_enable=YES ls_recurse_enabl ...

  9. 第五课 JAVA反射获取对象属性和方法(通过配置文件)

    Service1.java package reflection; public class Service1 { public void doService1(){ System.out.print ...

  10. IP地址必知

    IP地址分类:A类IP段 0.0.0.0 ~ 127.255.255.255(0nnnnnnn.hhhhhhhh.hhhhhhhh.hhhhhhhh)(保留给ZF或大型企业)B类IP段 128.0.0 ...