find命令使用指南

本文参考:https://www.cnblogs.com/johnnyliu/archive/2013/04/09/3010384.html
https://www.cnblogs.com/Ido-911/p/9638612.html
https://www.cnblogs.com/qiaopei/p/5515189.html

一直知道find命令的查找功能很强大,但从来没有进行系统性的学习,今天有时间正好学习一下!

find命令的基本组成:find pathname -option [-print -exec -ok]

  • pathth:find命令的查询根路径,也可以通过参数 -path参数指定

  • -option

一、文件操作选项

-name 要查找的文件名

示例:
find /home/sifang/bin -name startcsgc 在/home/sifang/bin目录下查找名称为startcsgc的文件

-type 指定查找的文件类型
  • b 块设备文件
  • d 目录
  • c 文字设备文件
  • p 管道文件
  • l 符号链接文件
  • f 普通文件

示例:
find /home/sifang/bin -type f -name startcsgc 在/home/sifang/bin目录下查找名称为startcsgc的文件
find /home/sifang -type d -name bin 在/home/sifang目录下查找名称为bin的文件夹

-size n 指定文件大小,数字前+表示大于,-表示小于,常用单位c(字节),k(KB),M(MB)

示例:
find /home/sifang/bin -size +1M -type f | wc -l 查找大小大于1M的文件并统计个数
find /home/sifang/bin -size -10M -type f |wc -l 查找大小小于10M的文件并统计个数
find /home/sifang/bin -size +1M -and -size -10M -type f | wc -l 查找大小在[1M ,10M ]区间内的文件并统计个数。

二、时间选项

-atime n 最近访问过(accessed)的文件,单位为天

-amin n 最近访问过的文件,单位为分钟(minute)

-ctime n / -cmin n 最近状态改变过(changed)的文件

-mtime n / -mmin n 最近内容修改过(modified)的文件

-newer file ! otherfile 查找更新时间比file新的文件,加上!表示查找比otherfile旧的文件

示例:
find /home/sifang/bin -amin +10 -type f 十分钟前访问过的文件
find /home/sifang/bin -amin -10 -type f 最近十分钟内访问的文件
find /home/sifang/bin -amin +10 -and -amin -20 -type f,以当前时间为基准,在20分钟以内10分钟之前时间段访问过的文件
find /home/sifang/bin -newer a ! b 查找修改时间比a新但比b旧的文件

补充
linux系统中文件的三个时间,access time访问时间、modify time 修改时间、change time 状态变化时间,对于新建的文件,三个时间是相同的,可以通过stat 和ls命令查看。
stat filename,三个时间都显示
ls -lc filename 显示文件的change time
ls -lu filename 显示文件的access time
ls -l filename 显示文件的modify time

三、用户权限

-perm ddd 用户权限permission,通常用三位数字表示权限如644,ddd前+表示至少有一种指定的权限,-表示必须包括指定的所有权限

示例:
find ./ -perm 777 -type f -exec ls -l {}; 查找权限为777的文件

-user / -group 按文件属主、属组来查找文件

-nouser / -nogroup 查找没有有效属主/ 属组的文件,即该文件的属主在/etc/passwd文件中不存在

四、文件路径

-path 给出文件路径。可在路径中查询,可以用于指定查找路径的子路径,结合-prune指出要忽略的子目录

-depth 先匹配所有的文件,再在子目录查找

-maxdepth n,设定递归搜索的目录层级,1为当前目录,表示不递归搜索。

-prune指要忽略的目录,结合-path选项使用,忽略-path指定的目录。

示例:
find ./ -prune

五、查询结果执行

-exec command

command以;为结束标志,其中是为了避免各个系统中;的不同意义,{}代表前面find查找出来的文件名。
示例:
find ./ -name aa -type f -exec ls -l {} ; 在当前目录查找aa文件,并显示其详细信息。
find ./ -type f -mtime +14 -exec rm {} ; 在当前目录查找14天之前修改的文件,并删除它们。

-ok command,功能同-exec,区别在于ok选项在执行命令时有交互式提示,提示你是否执行,是一种相对安全的做法。

示例:
find ./ -name aa -type f -ok ls -l {} ;

xargs 通常与管道连用,对匹配的文件执行操作。