xargs 与 exec 的作用类似,但是xargs与find 一起使用时,一般配合管道一起使用。

前面的输出转换为后方指令的参数输入,使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。

    (1)用法:

    用法:  [find命令] | [xargs] [其他命令]

    (2)功能:

     功能: 该命令的主要功能是从输入中构建和执行shell命令。与-exec类似,将find找到的文件当作参数执行接下来的命令。

    (3)xargs参数的解释

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

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

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

    (4)实例:

1)[root@localhost Documents]# find . -type f -print         find的输出到标准输出的参数-print

[root@localhost Documents]# find . -type f  -print    //等价于find . -type f 因为默认是输出到标准输出的,所以加不加标准输出-print一样
./less1
./less2
./head_text
./tail_text
./tempory
./newlocate
./uText
./findDir/t1.txt
./findDir/T1.txt
./findDir/T2.txt
./findDir/p1.pdf
./findDir/p2.pdf

2)[root@localhost Documents]# find . -type f -print | xargs file        查找当前目录下的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件

[root@localhost Documents]# find . -type f -print | xargs file
./less1: ASCII text
./less2: ASCII text
./head_text: ASCII text
./tail_text: ASCII text
./tempory: ASCII text
./newlocate: empty
./uText: empty
./findDir/t1.txt: empty
./findDir/T1.txt: empty
./findDir/T2.txt: empty
./findDir/p1.pdf: empty
./findDir/p2.pdf: empty

3)[root@localhost Documents]# find . -type f | xargs ls -l        列出每个查找到的文件的详细信息,包括相对路径

[root@localhost Documents]# find . -type f | xargs ll           //为每一个找到的文件执行ll命令显然是不行的(虽然ll是“ls -l”的缩写)
xargs: ll: 没有那个文件或目录
[root@localhost Documents]# find . -type f | xargs ls -l
-rw-r--r--. root root 5月 : ./findDir/p1.pdf
-rw-r--r--. root root 5月 : ./findDir/p2.pdf
-rw-r--r--. root root 5月 : ./findDir/t1.txt
-rw-r--r--. root root 5月 : ./findDir/T1.txt
-rw-r--r--. root root 5月 : ./findDir/T2.txt
-rw-r--r--. root root 5月 : ./head_text
-rw-r--r--. root root 5月 : ./less1
-rw-r--r--. root root 5月 : ./less2
-rw-r--r--. root root 5月 : ./newlocate
-rw-r--r--. root root 5月 : ./tail_text
-rw-r--r--. root root 5月 : ./tempory
-rw-r--r--. root root 5月 : ./uText
[root@localhost Documents]# ls -l
总用量
drwxr-xr-x. root root 5月 : findDir
-rw-r--r--. root root 5月 : head_text
-rw-r--r--. root root 5月 : less1
-rw-r--r--. root root 5月 : less2
-rw-r--r--. root root 5月 : newlocate
-rw-r--r--. root root 5月 : tail_text
-rw-r--r--. root root 5月 : tempory
-rw-r--r--. root root 5月 : uText

4)[root@localhost Documents]# find . -type f -print | xargs chmod a-r         回收文件的权限(r代表读,w代表写,r代表可执行)

[root@localhost Documents]# find . -type f -print | xargs chmod a-x    //回收x权限
[root@localhost Documents]# ll
总用量
drwxr-xr-x. root root 5月 : findDir
-rw-r--r--. root root 5月 : head_text
-rw-r--r--. root root 5月 : less1
-rw-r--r--. root root 5月 : less2
-rw-r--r--. root root 5月 : newlocate
-rw-r--r--. root root 5月 : tail_text
-rw-r--r--. root root 5月 : tempory
-rw-r--r--. root root 5月 : uText
[root@localhost Documents]# find . -type f -print | xargs chmod a-r //回收r权限
[root@localhost Documents]# ll
总用量
drwxr-xr-x. root root 5月 : findDir
--w-------. root root 5月 : head_text
--w-------. root root 5月 : less1
--w-------. root root 5月 : less2
--w-------. root root 5月 : newlocate
--w-------. root root 5月 : tail_text
--w-------. root root 5月 : tempory
--w-------. root root 5月 : uText

5)[root@localhost sunjimeng]# find ./Document -name "all.txt" -print | xargs echo "Success" >/home/sunjimeng/Documents/core.log      将找到的文件加上相对路径和自定义字符串输出到另一个文件中

[root@localhost Document]# cat all.txt
this is t1.txt!
I'm testing -exec option!
this is t2.txt!
I'm testing -exec optioin!
[root@localhost Document]# cd ./
[root@localhost Document]# cd ../
[root@localhost sunjimeng]# find ./Document -name "all.txt" -print | xargs echo "Success" >/home/sunjimeng/Documents/core.log
[root@localhost sunjimeng]# cat /home/sunjimeng/Documents/core.log //可以看出上个命令将什么拷进了自定义文件中
Success ./Document/all.txt
[root@localhost sunjimeng]# find ./Document -name "all.txt"
./Document/all.txt

6)[root@localhost sunjimeng]# find ./Document -name "all.txt" | xargs cat >/home/sunjimeng/Documents/t3.txt          将找到的文件内容拷贝到另一个文件中

[root@localhost Document]# cat all.txt
this is t1.txt!
I'm testing -exec option!
this is t2.txt!
I'm testing -exec optioin!
[root@localhost sunjimeng]# find ./Document -name "all.txt" | xargs cat >/home/sunjimeng/Documents/t3.txt //(5)输出的是自定义内容,而这个命令是把找到的文件内容拷贝一份到自定义文件中
[root@localhost sunjimeng]# cat /home/sunjimeng/Documents/t3.txt
this is t1.txt!
I'm testing -exec option!
this is t2.txt!
I'm testing -exec optioin!

7)[root@localhost sunjimeng]# find ./ -type f | xargs ls -l | awk 'BEGIN{size=0}{size+=$5};END{print size}'          统计当前目录下所有文件的大小,含子目录,精确到字节

[root@localhost sunjimeng]# find ./ -type f | xargs ls -l | awk 'BEGIN{size=0}{size+=$5};END{print size}'

8)[root@localhost Documents]# find . -type f -print | xargs grep "Lost"        查找find找到的文件中有没有包含"Lost"字符串的

[root@localhost Documents]# find . -type f -print | xargs grep "t3.txt" //虽然当前目录下有t3.txt,但查询的结果却为空
[root@localhost Documents]# find . -type f -print
./less1
./less2
./head_text
./tail_text
./tempory
./newlocate
./uText
./findDir/t1.txt
./findDir/T1.txt
./findDir/T2.txt
./findDir/p1.pdf
./findDir/p2.pdf
./find
./core.log
./t3.txt
[root@localhost Documents]# cat less1
Lost means Get! No losing No getting! End!
[root@localhost Documents]# find . -type f -print | xargs grep "Lost" //表明它是根据文件内容进行匹配的,而不是根据查找到的文件的名字。
./less1:Lost means Get!

9)[root@localhost findDir]# find -type f -name "t1.txt" -print |xargs -p mv t2.txt      提醒是否执行find后面的其他命令

[root@localhost findDir]# find -type f -name "t1.txt" -print |xargs -p mv t2.txt             这里用mv命令出了错误,后面解决!
mv t2.txt ./t1.txt ?...n
[root@localhost findDir]# find -type f -name "t1.txt" -print |xargs -p mv t2.txt
mv t2.txt ./t1.txt ?...y
mv: 无法获取"t2.txt" 的文件状态(stat): 没有那个文件或目录

每天一个Linux命令(21)find命令_xargs参数的更多相关文章

  1. linux常用命令(21)tar命令

    通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar命令可以为linux ...

  2. linux 的21个命令:

    1:ls  [list] 2:输入输出重定向 3:| 管道 4:chmod 5:cd 6:mkdir 7:cp 8:rm 9:mv 10:cat 11:pwd 12:ln[link] 13:grep ...

  3. linux 20个常用命令

    一.文件和目录 1. cd命令 (它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径) cd /home    进入 '/ home' 目录 cd ..       ...

  4. 每天一个 Linux 命令(21):find命令之xargs

    在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行.但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出 ...

  5. 每天一个linux命令(21):tar命令

    通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar 命令可以为linu ...

  6. 2-1 Linux 操作系统及常用命令

    根据马哥linux初级视频 2-1.2-2来编辑 1. GUI与CLI GUI: Graphic User Interface CLI: Command Line Interface 注:在Windo ...

  7. 每天一个linux命令(48):watch命令

    watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...

  8. 每天一个linux命令目录

    出处:http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html 开始详细系统的学习linux常用命令,坚持每天一个命令,所以这个系列为每 ...

  9. 每天一个linux命令(51):lsof命令

    lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协议 ...

随机推荐

  1. 基于React的PC网站前端架构分析

    代码地址如下:http://www.demodashi.com/demo/12252.html 本文适合对象 有过一定开发经验的初级前端工程师: 有过完整项目的开发经验,不论大小: 对node有所了解 ...

  2. php调用python

    test_python.php <?php $k = $_REQUEST['k']; if (!empty($k)) { $k = trim($k); //$a 用来捕获输出 // 这里的arr ...

  3. 阿里巴巴 DevOps 转型后的运维平台建设

    原文:http://www.sohu.com/a/156724220_262549 本文转载自公众号「DevOps 时代」,高效运维社区致力于陪伴您的职业生涯,与您一起愉快的成长. 作者简介: 陈喻( ...

  4. [C/C++标准库]_[0基础]_[怎样实现std::string自己的Format(sprintf)函数]

    场景: 1.  C语言有自己的sprintf函数,可是这个函数有个缺点,就是不知道须要创建多大的buffer, 这时候能够使用snprintf函数来计算大小,仅仅要參数 buffer为NULL, co ...

  5. MySQL 查询 数据库有多少表 表名是哪些

    1.查询sjcenter数据库里开头为sj_demo和sj_onlyinv的所有表的总条数 select sum(table_rows) from (select table_name,table_r ...

  6. js 正则表达式 取反

    http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp 以匹配中文为例 const test_value = '李钊鸿' if (/[^\u4e00 ...

  7. 安装Geo-IP

    安装指令例如以下所看到的,跟着步骤一步一步运行就可以.使用root权限,假设不是的话,请依据情况加上sudo权限命令. cd /tmp wget http://geolite.maxmind.com/ ...

  8. foxmail 客户端 LOGIN Login error password error

    显示这个错误是我在更换电脑时,将E:\Foxmail 7.2\Storage\15167136106@163.com 账户 移动到新的电脑上,并在新电脑上创建用户,总是报:账户或密码错误 我输入的密码 ...

  9. Win7 设置、访问共享文件夹

    一.设置共享文件夹 右键点击文件夹,打开“属性”窗口,选择“共享”选项卡 点击“共享”按钮,打开“文件共享”窗口,在下拉列表中选择账户,点“添加”,最后点“共享”按钮. 二.访问 \\192.168. ...

  10. Unable to resolve address &#39; &#39; service &#39; &#39;: Name or service not known

    感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免.欢迎指正. 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...