find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

语法

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

选项

find 的选项特别多,这里列举几个常用的:

  • -name 按照文件名查找文件。
  • -perm 按照文件权限来查找文件。
  • -user 按照文件所属用户来查找文件。
  • -group 按照文件所属的用户组来查找文件。
  • -mtime +/1 n 按照文件的更改时间(以天为单位)来查找文件。
  • -atime/-ctime/-mtime 以天为单位
  • -amin/-mmin/-cmin 以分钟为单位。
  • -type 按照文件类型查找文件。
  • b 块设备文件。
  • d 目录。
  • c 字符设备文件。
  • p 管道文件。
  • l 符号链接文件。
  • f 普通文件。
  • -size n 按照文件大小查找文件。
  • c 字节
  • w 2字节
  • b 512字节
  • K 千字节
  • M 兆字节
  • G 吉字节

对查询结果的处理动作

  • -exec <command> {} 假设 find 指令的回传值为 True ,就执行该指令。
  • -ok <command> {} 此参数的效果和指定 -exec类似,但在执行指令之前会先询问用户,若回答 y 或 Y ,则放弃执行命令。
  • -print 默认动作,标准输出。
  • -delete 删除查找到的文件。

示例

在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件

find . -name "*.c"

将目前目录其其下子目录中所有一般文件列出

find . -type f

将目前目录及其子目录下所有最近 20 天内更新过的文件列出

find . -ctime 20

将目前目录及其子目录下所有权限为664的文件列出

find . -perm 664

使用 grep 命令在名字以 debug 开头并最近一天修改的文件中搜索 RUN 单词

find ./ -name "debug*" -mtime -1 -exec grep "RUN" {} \;
#  也可以和 xargs 结合使用
find ./ -name "debug*" -mtime -1 | xargs grep "RUN"

修改目录权限

chmod 755 `find /path -type d`
# 或者
find /path -type d -exec chmod 755 {} \;

修改文件权限

chmod 644 `find /path -type f`
# 或者
find /path -type f -exec chmod 644 {} \;