Shell编程—【05】Linux的find命令详解

836 阅读3分钟

常用参数:

-name 根据文件名查找

查找/etc目录下以conf结尾的文件

 find /etc -name '*conf'

-iname 根据文件名查找忽略大小写

查找当前目录文件名为abc的文件,不区分大小写

 find ./ -iname abc

-user 根据所属用户查找

查找当前目录文件所有者为testuser的文件

 find ./ -user testuser

-group 根据所属用户组查找

查找文件属组为work的所有文件

 find . -group work

-type 根据类型查找

  • f 文件 find . -type f
  • d 目录 find . -type d
  • c 字符设备文件 find . -type c
  • b 块设备文件 find . -type b
  • l 链接文件 find . -type l
  • p 管道文件 find . -type p

-size 根据大小查找

  • -n 小于大小n的文件
  • +n 大于小于n的文件

例1:查找/etc目录下小于10000字节的文件

 find /etc -size -10000c

例2:查找/etc目录下大于1M的文件

 find /etc -size +1M

-mtime 根据文件更改时间查找 (天)

  • -n n天以内修改的文件
  • +n n天以外修改的文件
  • n 正好n天修改的文件

例1:查找/etc目录下5天之内修改且以conf结尾的文件

find /etc -mtime -5 -name '*.conf'

例2:查找/etc目录下10天之前修改且属主为root的文件

 find /etc -mtime +10 -user root

-mmin 根据文件更改时间查找 (分钟)

  • -n n分钟以内修改的文件
  • +n n分钟以外修改的文件

例1:查找/etc目录下30分钟之前修改的文件

find /etc -mmin +30

例2:查找/etc目录下30分钟之内修改的目录

find /etc -mmin -30 -type d

-mindepth n 表示从n级子目录开始查找

例0:在/etc下的3级子目录开始搜索

 find /etc -mindepth 3 

-maxdepth n 表示最多查找到n级子目录

例1:在/etc下搜索符合条件的文件,但最多搜索到2级子目录

find /etc -maxdepth 3 -name '*.conf'

例2:

find ./etc/ -type f -name '*.conf' -size +10k -maxdepth 2

了解参数:

-nouser 查找没有属主的用户

find . -type f -nouser

-nogroup 查找没有属组的用户

find . -type f -nogroup

-perm 根据用户权限查找

find . -perm 664

-prune 排除特定目录去查找

  • 通常和-path一起使用,用于将特定目录排除在搜索条件之外

例1:查找当前目录下所有普通文件,但排除test目录

find . -path ./etc -prune -o -type f

例2:查找当前目录下所有普通文件,但排除etc和opt目录

find . -path ./etc -prune -o -path ./opt -prune -o -type f

例3:查找当前目录下所有普通文件,但排除etc和opt目录,但属主为hdfs

find . -path ./etc -prune -o -path ./opt -prune -o -type f -a -user hdfs

例4:查找当前目录下所有普通文件,但排除etc和opt目录,但属主为hdfs,且文件大小必须大于500字节

find . -path ./etc -prune -o -path ./opt -prune -o -type f -a -user hdfs -a -size +500c

-newer file1

find /etc -newer a

操作:

-print 打印输出

-exec 对搜索到的文件执行特定的操作,格式为-exec 'command' {} ;

例1:搜索/etc下的文件(非目录),文件名以conf结尾,且大于10k,然后将其删除

find ./etc/ -type f -name '*.conf' -size +10k -exec rm -f {} \;

例2:将/var/log/目录下以log结尾的文件,且更改时间在7天以上的删除

find /var/log/ -name '*.log' -mtime +7 -exec rm -rf {} \;

例3:搜索条件和例子1一样,只是不删除,而是将其复制到/root/conf目录下

find ./etc/ -size +10k -type f -name '*.conf' -exec cp {} /root/conf/ \;

-ok 和exec功能一样,只是每次操作都会给用户提示

逻辑运算符:

-a 与

-o 或

-not | ! 非

例1:查找当前目录下,属主不是hdfs的所有文件

find . -not -user hdfs 	|	find . ! -user hdfs

例2:查找当前目录下,属主属于hdfs,且大小大于300字节的文件

find . -type f -a -user hdfs -a -size +300c

例3:查找当前目录下的属主为hdfs或者以xml结尾的普通文件

find . -type f -a \( -user hdfs -o -name '*.xml' \)