在使用 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]# ls
dir1 log1 log2
[root@localhost test]# find . -type f -print |xargs file
./log1: empty
./log2: ASCII text

2. 从根目录/开始查找名为core的文件或目录,并将查找结果保存到/tmp/core.log 文件中

命令:

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

输出:

[root@localhost tmp]# ls
xmlXPathIniteihlTv.c xmlXPathInitLrmz_p.c xmlXPathInitpywFgf.c xmlXPathInitv76QxM.c yum_save_tx.2018-11-15.18-23.5nqJ3w.yumtx yum_save_tx.2018-11-16.23-54.cMoa46.yumtx
[root@localhost tmp]# find / -name 'core' -print |xargs > /tmp/core.log
[root@localhost tmp]# ls
core.log xmlXPathIniteihlTv.c xmlXPathInitLrmz_p.c xmlXPathInitpywFgf.c xmlXPathInitv76QxM.c yum_save_tx.2018-11-15.18-23.5nqJ3w.yumtx yum_save_tx.2018-11-16.23-54.cMoa46.yumtx
[root@localhost tmp]# cat core.log
/dev/core /proc/sys/net/core /usr/lib/python2.7/site-packages/firewall/core /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/infiniband/core /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/memstick/core /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/mmc/core /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/net/ethernet/mellanox/mlx5/core /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/usb/core /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/core /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/sound/core /usr/lib/modules/3.10.0-862.14.4.el7.x86_64/kernel/drivers/infiniband/core /usr/lib/modules/3.10.0-862.14.4.el7.x86_64/kernel/drivers/memstick/core /usr/lib/modules/3.10.0-862.14.4.el7.x86_64/kernel/drivers/mmc/core /usr/lib/modules/3.10.0-862.14.4.el7.x86_64/kernel/drivers/net/ethernet/mellanox/mlx5/core /usr/lib/modules/3.10.0-862.14.4.el7.x86_64/kernel/drivers/usb/core /usr/lib/modules/3.10.0-862.14.4.el7.x86_64/kernel/net/core /usr/lib/modules/3.10.0-862.14.4.el7.x86_64/kernel/sound/core

说明:

>
是定向输出到文件,如果文件不存在,就创建文件;如果文件存在,就将其清空;一般我们备份清理日志文件的时候,就是这种方法:先备份日志,再用>,将日志文件清空(文件大小变成0字节); >>
这个是将输出内容追加到目标文件中。如果文件不存在,就创建文件;如果文件存在,则将新的内容追加到那个文件的末尾,该文件中的原有内容不受影响。

3:从当前目录下开始查找其他用户具有读、写和执行权限的文件,并收回相应的写权限

命令:

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

输出:

[root@localhost test]# ll
total 4
drwxr-xr-x. 2 root root 6 Nov 20 18:28 dir1
-rwxrwxrwx. 1 root root 0 Nov 20 18:28 log1
-rw-r--r--. 1 root root 4 Nov 20 18:29 log2
[root@localhost test]# find . -perm -7 -print | xargs chmod o-w
[root@localhost test]# ll
total 4
drwxr-xr-x. 2 root root 6 Nov 20 18:28 dir1
-rwxrwxr-x. 1 root root 0 Nov 20 18:28 log1
-rw-r--r--. 1 root root 4 Nov 20 18:29 log2

说明:

可以看到,执行命令前 log1文件,所属用户 所属组 其他用户均有读、写、执行权限,执行命令后,其他用户没有了写权限,其他权限都还在

4. 用grep命令在从当前目录下开始查找类型为文件,且文件内容中含有hostname的文件

命令:

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

输出:

[root@localhost test]# ls
dir1 log1 log2
[root@localhost test]# cat log1
[root@localhost test]# cat log2
我是log2
hostnamesina=sina.com 哈哈
第三行
[root@localhost test]# find . -type f -print | xargs grep "hostname"
./log2:hostnamesina=sina.com 哈哈

说明:

Linux grep命令用于查找文件里符合条件的字符串。

grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一行显示出来

5. 从当前目录下开始查找名称中以log开头的文件或目录,并将其移动到dir1目录中

命令:

 find . -name 'log*' | xargs -i mv {} dir1

输出:

[root@localhost test]# ls
dir1 log1 log2
[root@localhost test]# find . -name 'log*' | xargs -i mv {} dir1
[root@localhost test]# ls
dir1
[root@localhost test]# cd dir1/
[root@localhost dir1]# ls
log1 log2

说明:

{} 花括号代表前面find查找出来的文件名。

6. 从当前目录下开始查找名称中以log开头的文件或目录,并将其移动到当前目录的父级目录中,移动时,进行询问

命令:

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

输出:

[root@localhost test]# ls
dir1
[root@localhost test]# cd dir1/
[root@localhost dir1]# ls
log1 log2 log3
[root@localhost dir1]# find . -name "log*" | xargs -p -i mv {} ..
mv ./log1 .. ?...y
mv ./log2 .. ?...y
mv ./log3 .. ?...n
[root@localhost dir1]# ls
log3
[root@localhost dir1]# cd ..
[root@localhost test]# ls
dir1 log1 log2

说明:

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

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

命令:

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

输出:

[root@localhost dir1]#  find . -type f -atime +0 -print0 | xargs -0 -l1 -t rm -f
rm -f
[root@localhost dir1]#

说明:

-l1  是指一次处理一个
-t 是指处理之前打印出的命令
-print 在每一个输出后会添加一个回车换行符,而-print0则不会。

linux每日命令(23):find命令之xargs的更多相关文章

  1. Linux每日小技巧---ss命令

    ss命令 ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连 ...

  2. Redis 的键命令、HyperLogLog 命令、脚本命令、连接命令、服务器命令

    Redis 的键命令.HyperLogLog 命令.脚本命令.连接命令.服务器命令 Redis 的键命令 Redis 的键命令主要用于管理 Redis 的键,如删除键.查询键.修改键及设置某个键等. ...

  3. linux包之findutils之find和xargs命令

    解释 [root@localhost ~]# rpm -qa|grep findfindutils-4.4.2-6.el6.x86_64 find 路径 测试 动作 三个步骤的处理过程查找一个或多个目 ...

  4. linux每日命令(1):ls命令

    ls命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查看linux ...

  5. linux每日命令(3):ln命令

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...

  6. linux每日命令(26):Linux文件属性详解

    Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.具体情况如下: 命令: ls -lih 输出: [root@loca ...

  7. linux每日命令(27):chmod命令

    chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法.一种是包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设定法. Linux系统中的每 ...

  8. Linux每日一命令:【00】总纲

    Linux每日一命令更新频率为每周5篇. 文章结构如下: 简介 语法 选项 参数 常用实例 实用技巧(可选) 参考文档 文章目录如下: 2018-02-19 20:15 -- Linux每日一命令:[ ...

  9. linux每日命令(8):mv命令

    mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 一.命令格式: mv [选项] 源文件或目 ...

随机推荐

  1. Linux系统 vi/vim文本编辑器

    Linux系统 vi/vim文本编辑器 (一)Vim/Vi简介 (二)Vim/Vi工作模式 (三)Vim/Vi基本使用 (四)Vim/Vi应用技巧 (一)Vim/Vi简介 Vim/Vi是一个功能强大的 ...

  2. 不一样的go语言-不同的语法之type

    前言   在go语言中,type用于类型定义(type definition)与类型别名(type alias).这两者的差别从名字上已经可以初见端倪.   类型定义即定义新类型,是一个全新的类型,但 ...

  3. manjaro 配置 独立显卡驱动

    参考 https://blog.csdn.net/weixin_42205310/article/details/81905293 尝试多次 只有这篇配置成功. ①先解决依赖sudo pacman - ...

  4. bzoj3545: [ONTAK2010]Peaks 重构树 主席树

    题目链接 bzoj3545: [ONTAK2010]Peaks 题解 套路重构树上主席树 代码 #include<cstdio> #include<algorithm> #de ...

  5. BZOJ.3262.陌上花开([模板]CDQ分治 三维偏序)

    题目链接 BZOJ3262 洛谷P3810 /* 5904kb 872ms 对于相邻x,y,z相同的元素要进行去重,并记录次数算入贡献(它们之间产生的答案是一样的,但不去重会..) */ #inclu ...

  6. angularJS常用的内置方法

    angular.lowercase(aaa); angular.uppercase(bbb); angular.isString(); angular.isNumber(); angular.isAr ...

  7. C语言中常用的字符串操作函数

    程序开头要声明 #include <string.h> 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char ...

  8. 【Github教程】:github入门到精通

    [初识Github] 首先让我们大家一起喊一句"Hello Github".YEAH!就是这样. 原文 http://www.eoeandroid.com/thread-27455 ...

  9. 20172302 《Java软件结构与数据结构》第八周学习总结

    2018年学习总结博客总目录:第一周 第二周 第三周 第四周 第五周 第六周 第七周 第八周 教材学习内容总结 第十二章 优先队列与堆 1.堆(heap)是具有两个附加属性的一棵二叉树: (1)它是一 ...

  10. 20172302 《Java软件结构与数据结构》第三周学习总结

    2018年学习总结博客总目录:第一周 第二周 第三周 教材学习内容总结 第五章 队列 1.队列是一种线性集合,其元素从一端加入,从另一端删除:队列元素是按先进先出(FIFO(First in Firs ...