shell组合拳:(一)find 与 xargs
目录一、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.htmlfind、xargs、grep基本用法 tianlong_cool
https://blog.csdn.net/tianlong_cool/article/details/78566349?utm_source=app&app_version=4.17.0Xargs用法详解 czmmiao
https://blog.csdn.net/bbwangj/article/details/82871320?utm_source=app&app_version=4.17.0Linux下find命令详解 -纸短情长
https://blog.csdn.net/l_liangkk/article/details/81294260?utm_source=app&app_version=4.17.0