Linux下的find命令用来在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效。
需要注意的是在运行一个非常消耗资源的find命令时,我们都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
1. 想查看当前文件夹及子文件夹里文件名含有“log”字样的的文件
# find . -name "*.log"
. :表示当前目录
-name:表示要根据名称查找
2. 想查看当前文件夹及子文件夹里有没有”xinsz”目录
# find . -type d -name xinsz
-type:表示设定类型,d表示文件夹类型,可以替换为f(普通文件)、l(链接文件)
3. 想找出当前文件夹及子文件夹里所有后缀是”.txt”的文件
# find . -name “*.txt”
4. 想查找当前目录及其子文件夹中“roc”用户自己的文件有哪些
# find . -user roc
-user:用于设定所属用户的名称,此处可替换为-group,即所属用户组的名称
5. 想查找当前文件夹及子文件夹里权限设定为777的所有文件
# find . -perm 777
-perm:用于设定权限
6. 想查找当前文件夹及子文件夹里的同时含有b字符和3字符的文件:用到正则表达式技术
# find . -regex ‘.*b.*3’
-regex:表示使用正则表达式进行匹配。请注意,此命令会和“全路径”进行匹配,也就是说前面要加.*,因为输出结果中会有“./”符号。
7. 如果想全部输出用find命令查找出的”*.abc”文件的内容
# find . -type f -name “*.abc” -exec cat {} \;
-exec 表示由find找到的匹配项会作为“-exec后面设定的命令”的参数
可以使用-ok代替-exec,这样对每个匹配项进行操作,都会要求用户确认(y为是,n为否)
命令最后的{} \; 别忘了写,其中{}代表用find查找到的结果中的每一个查找项。
8. 查找当前目录下在10分钟内被修改过的文件
# find . -mmin -10
访问过用amin,修改过用mmin,文件状态改变过用cmin
精确到分钟的用amin,mmin,cmin,精确到天的用atime,mtime,ctime
在10分钟之内的用-10,在5分钟以上的用+10
9. 想查找当前目录及子目录下文件大小大于10M的所有文件
# find . -size +10000000c
-size:表示文件大小,+表示大于某个数,-表示小于某个数。c表示单位是字节,你可以将c换成k,M,G。
10. 上述所有的find命令都是查找当前目录及其子目录。如果不想深入到子目录中,而是只查找当前一层目录,则可以:
# find . -maxdepth 1 -name “*.c”
11.查找当前所有目录并排序
# find . -type d | sort
几个混合应用:
1.查找磁盘中大于3M的文件:
#find . -size +3000k -exec ls -ld {} ;
2.将find出来的东西拷到另一个地方
# find *.c -exec cp ‘{}’ /tmp ‘;’
3.避开多个文件夹
# find test \( -path test/test4 -o -path test/test3 \) -prune -o -print
\ 表示引用 shell不会对\后面的字符做特殊解释,而留给find命令去解释其意义。
不查找test4 和 test3