shell组合拳:(一)find 与 xargs

发布时间: 2022.02.11 浏览: 0 发布者: 慕柏生物

目录一、find的基础知识1.1 find和grep的区别1.2 find使用格式1.3 find常用命令参数1.4 find的特点二、find的查找规则2.1 根据文件名查找2.2 根据文件大小查找2.3 根据所有者查找2.4 根据所属组查找2.5 查找路径下的空文件或空文件夹2.6 根据文件访问时间查找2.7 根据文件修改时间查找2.8 使用混合方式查找三、xargs的基础知识和用法3.1 xargs常用命令参数3.2 分析到"asd"停止工作3.3 一次传递三个参数3.4 多列变一列3.5 读取文件并读作stdin3.6 修改分隔符四、find和xargs结合使用4.1 查找当前目录的文件并测试类别4.2 在当前目录下查找指定词4.3 删除3天前的所有文件4.4 删除空文件

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

目录

一、find的基础知识
二、find的查找规则
三、xargs的基础知识和用法
四、find和xargs结合使用

一、find的基础知识

1.1 find和grep的区别

find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。
grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。

1.2 find使用格式

find [查找目录] [查找规则] [查找完后的操作]

1.3 find常用命令参数

符号所表示目录
~$HOME目录
.当前目录
/根目录

1.4 find的特点

find在查找文件的时候是真正的在遍历所有的文件,如果find没有找到所需要的文件,那这个文件在系统中一定不存在。因此find在使用的时候会比其他的查找指令更详尽一些,遍历一个大的文件系统可能也需要很长时间。

二、find的查找规则

2.1 根据文件名查找

1)在根目录下 查找所有文件名为file的文件(区分大小写)

$ find ./ -name file

2)在根目录下 查找所有文件名为file的文件(不区分大小写)

$ find ./ -iname file

3) 在根目录下 查找所有"file"开头的文件

$ find ./ -name "file*"

4) 在根目录下 查找file后面为单字符的文件,比如file1和file2

$find ./  -name "file?"

5) 在根目录下 查找文件file1,file2和file3

$find ./ -name "file[123]"
[]表示通配括号里的任意一个字符
[]里的内容会被解析成单字符

2.2 根据文件大小查找

查找当前目录下大于n字节的文件
$ find . -size +n
"-n"即小于n字节的文字
"n" 等于n字节的文字

2.3 根据所有者查找

在当前目录下查找文件所有者名为root的文件
$ find ./-user root
在根目录下查找用户是Alice或者Bob的文件
$ find / -user Alice -or -user Bob
在/根目录中查找所有不属于Charlie用户的文件
$ find /tmp ! -user Charlie

2.4 根据所属组查找

在当前目录下查找文件用户组名为root的文件
find . -group root

2.5 查找路径下的空文件或空文件夹

$ find . -empty

2.6 根据文件访问时间查找

查找当前目录下一天内被访问的文件
$ find . -atime -1 -type f -print
查找当前目录下两分钟前被访问的文件
$ find . -amin +2 -type f -print

2.7 根据文件修改时间查找

查找2天内被更改过的文件 
$  find . -mtime -2 -type f -print
查找2天前被更改过的文件 
$ find . -mtime +2 -type f -print
查找5分钟前被更改过的文件 
$ find . -mmin -5 -type f -print

2.8 使用混合方式查找

在根目录下查找大于140字节并在最后3分钟内修改的文件
$ find / -size +140c -and -mtime +3  

三、xargs的基础知识和用法

3.1 xargs常用命令参数

符号所表示目录
-0将特殊字符还原为一般字符
-a从文件中读入作为sdtin
-d修改分隔符
-e后面可以接一个字符(无空格),当xargs分析到这个字符时,就会停止工作
-i以{}作为替换符号,传递的时候看到{}就将被结果替换
-n指定每次将多少项作为命令行参数
-p执行每个命令时询问使用者
-t打印最终要执行的命令,直接执行,不需要用户确认
-r当xargs的输入为空的时候则停止xargs

3.2 分析到"asd"停止工作

$ cat qwer1
1q2 2w3 3e4 4r5
asd fgh
$ xargs -E 'asd' -a qwer1 echo
1q2 2w3 3e4 4r5
或者
$ cat qwer1 | xargs -E 'asd' echo
1q2 2w3 3e4 4r5

3.3 一次传递三个参数

$ echo 'aa,bb,cc,dd,ee,ff,gg,hh' | xargs -d ',' -n 3 echo
aa bb cc
dd ee ff
gg hh

3.4 多列变一列

$ echo "1 2 3"|xargs -n1
1
2
3

3.5 读取文件并读作stdin

$ cat qwer1
1q2 2w3 3e4 4r5
asd fgh
$ xargs -a qwer1 echo
1q2 2w3 3e4 4r5 asd fgh

3.6 修改分隔符

$ cat qwer2
qq,ww,ee,rr@tt
yy.uu.ii.oo@pp
$ cat qwer2 | xargs -d '@' echo
qq,ww,ee,rr tt
yy.uu.ii.oo pp

四、find和xargs结合使用

4.1 查找当前目录的文件并测试类别

$ find . -type f -print | xargs file

4.2 在当前目录下查找指定词

$ find . -type f -print | xargs grep "word"

4.3 删除3天前的所有文件

$ find . -mtime +3 -print|xargs rm -f –r  

4.4 删除空文件

$ find ./ -size 0 | xargs rm -f & 

参考

  • Linux 中强大且常用命令:find、grep
    吴秦(Tyler)
    http://www.cnblogs.com/skynet/archive/2010/12/25/1916873.html

  • find、xargs、grep基本用法 tianlong_cool
    https://blog.csdn.net/tianlong_cool/article/details/78566349?utm_source=app&app_version=4.17.0

  • Xargs用法详解 czmmiao
    https://blog.csdn.net/bbwangj/article/details/82871320?utm_source=app&app_version=4.17.0

  • Linux下find命令详解 -纸短情长
    https://blog.csdn.net/l_liangkk/article/details/81294260?utm_source=app&app_version=4.17.0

640.jpg