
Linux find 命令详解
find 是 Linux 系统中一个非常强大且灵活的命令,用于在指定目录及其子目录中查找符合特定条件的文件和目录。它可以根据文件名、文件类型、大小、修改时间等多种条件进行搜索,并且可以对找到的文件执行指定的操作。以下是 find 命令的详细用法和示例。
基本语法
find [起始路径] [匹配条件] [动作]- 起始路径:指定从哪个目录开始搜索。如果省略,默认为当前目录(.)。
- 匹配条件:根据文件的名称、类型、大小、权限等属性来筛选结果。
- 动作:对找到的每个文件或目录执行的操作,如打印、删除、移动等。
常用选项
按名称查找
- -name <pattern>:按文件名查找,支持通配符(* ? [])。find /path/to/search -name "*.txt"
- -iname <pattern>:忽略大小写地按文件名查找。find /path/to/search -iname "*.TXT"
按类型查找
- -type <type>:按文件类型查找。<type> 可以是以下值之一:
- f:普通文件
- d:目录
- l:符号链接
- b:块设备文件
- c:字符设备文件
- p:管道文件
- s:套接字文件
- -type <type>:按文件类型查找。<type> 可以是以下值之一:
按大小查找
- +n:大于 n 单位
- -n:小于 n 单位
- n:等于 n 单位 单位可以是 c(字节)、k(千字节)、M(兆字节)、G(吉字节)等。find /path/to/search -size +100M
按时间查找
- -mtime n:文件内容最后修改时间在 n 天前
- -atime n:文件访问时间在 n 天前
- -ctime n:文件元数据(如权限、所有权)更改时间在 n 天前
- -mmin n:文件内容最后修改时间在 n 分钟前
- -amin n:文件访问时间在 n 分钟前
- -cmin n:文件元数据更改时间在 n 分钟前find /path/to/search -mtime -7
按权限查找
- -perm <mode>:按文件权限查找。可以使用八进制表示法(例如 644),也可以使用符号表示法(例如 u=rwx,g=rx,o=r)。find /path/to/search -perm 755
按用户或组查找
- -user <username>:按文件所有者查找
- -group <groupname>:按文件所属组查找find /path/to/search -user john
逻辑组合
- -and、-a:逻辑与(默认)
- -or、-o:逻辑或
- -not、!:逻辑非find /path/to/search \( -name "*.txt" -o -name "*.md" \)
深度限制
- -maxdepth <levels>:限制搜索的最大深度
- -mindepth <levels>:设置搜索的最小深度find /path/to/search -maxdepth 2 -name "*.log"
执行动作
- -print:将结果输出到标准输出(默认动作)
- -exec <command> {} \;:对找到的每个文件执行 <command>,{} 代表当前文件,\; 表示命令结束
- -delete:删除找到的文件或目录
- -ls:以类似 ls -l 的格式列出详细信息find /path/to/search -name "*.tmp" -exec rm {} \;
示例
在 /home 目录及其子目录中查找所有 .jpg 文件并删除它们:
find /home -name "*.jpg" -exec rm {} \;查找 /var/log 目录下大于 10MB 的日志文件,并以长格式显示它们的详细信息:
find /var/log -size +10M -ls查找 /etc 目录下属于 root 用户且最近 7 天内被修改过的文件:
find /etc -user root -mtime -7查找 /usr/bin 目录下所有可执行文件,并将它们复制到 /backup 目录:
find /usr/bin -type f -executable -exec cp {} /backup/ \;
通过合理使用 find 命令的各种选项和参数,可以高效地在 Linux 系统中定位和管理文件及目录。
