find命令

有时候需要寻找出一些文件并执行相应的操作,比如用户家目录下的.thumnails目录下是一些缓存信息,对于7天以上的缓存可以删除:

1
$ find ./.thumbnails/* -type f -atime +7 -exec rm {} \;

此处-exec是对寻找到的文件执行相应的操作rm,注意rm{}以及\;之间有一个空格。

find命令用法:

1
2
3
4
5
find [-H] [-L] [-P] [-Olevel]
[-D help|tree|search|stat|rates|opt|exec]
[path...] [expression]

默认路径为当前目录;默认表达式为 -print

主要参数说明:

  • -follow 遇到链接文件,查找链接对象
  • -depth 现在当前目录查找,然后在子目录查找
  • -maxdepth LEVELS
  • -mindepth LEVELS
  • -mount 不跨越挂载点查找

比较测试 (N 可以是 +N 或 -N 或 N):

根据时间来比较:

  • -amin N 最后N分钟内访问过的文件
  • -anewer FILE 比FILE更近被访问过
  • -atime N 最后N天访问的文件
  • -cmin N 最近N分钟改变文件状态的文件
  • -cnewer 文件 比参考文件更近被改变文件状态
  • -ctime N 最近N天改变文件状态的文件
  • -mmin N 通过最近N分钟改变文件数据的文件
  • -mtime N 通过N天时间查找,-7表7天内
  • -newer 文件1 !文件2 通过比文件1更新,比文件2更旧查找

根据用户来比较:

  • -gid N 根据用户组ID
  • -group 名称 通过用户组查找
  • -nouser 通过所在用户无效查找
  • -nogroup 通过所在组无效查找
  • -user 用户名 通过用户名查找
  • -uid N 通过用户ID查找

根据权限来比较:

  • -perm [+-]访问模式 通过权限查找,-007表不超过是007,+007表至少007
  • -readable
  • -writable
  • -executable
  • -context 文本 只有SELINUX可用

根据文件或目录来比较:

  • -fstype 类型 根据文件系统类型查找
  • -empty 为空,不管是普通文件还是目录
  • -inum N 根据节点
  • -name 匹配模式 通过文件名查找
  • -iname 匹配模式 通过更宽泛的文件名模式匹配查找
  • -lname 匹配模式
  • -ilname 匹配模式 通过最宽泛的文件名模式匹配查找
  • -path 匹配模式
  • -wholename 匹配模式
  • -ipath 匹配模式
  • -links N 文件有N个链接
  • -size N[bcwkMG] 通过文件大小查找,如10[b]表10块,10[c]表10字符,10[w]表10单词
  • -type [bcdpflsD] 通过文件类型查找,b是块设备,
    • c是字符设备,d是目录,p是管道,
    • f是普通文件,l是链接文件,
    • s是socket文件,D是Solaris的串口文件
  • -regex 匹配模式 文件名匹配模式
  • -iregex 匹配模式

打印操作:

  • -delete
  • -print 打印到屏幕
  • -print0 打印到屏幕,用null代替\n换行符
  • -printf 格式 按格式打印到屏幕
  • -fprint 文件 打印到文件
  • -fprint0 文件
    -fprintf 文件 格式 按格式打印到文件

其它操作:

  • -exec 命令 ; 对查找到的文件执行操作
  • -exec 命令 {} + -ok 命令 ; 用户同意后,执行操作
  • -execdir 命令 ; 对子目录也执行操作
  • -execdir 命令 {} + -okdir 命令 ;
  • -ls
  • -fls 文件 以ls方式输出到文件中

更多信息,请参考:http://www.linuxsir.org/main/?q=node/137

吴羽舒 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!