1.文件名和路径
参数 说明 示例
-name pattern 按文件名匹配(区分大小写)
-iname pattern 按文件名匹配(忽略大小写)
-path pattern 按路径匹配
-ipath pattern 按路径匹配(忽略大小写)
find . -name "file.txt"
find . -iname "file.txt"
find /home -path "*/documents/*"
find /home -ipath "*/documents/*"
2.文件类型
-type f 查找文件
-type d 查找目录
-type l 查找符号链接
find . -type f
find . -type d
find . -type l
3.权限和所有权
-user username 按文件所有者过滤
-group groupname 按文件所属组过滤
-perm mode 按文件权限过滤
-nouser 查找没有有效所有者的文件
-nogroup 查找没有有效所属组的文件
find . -user "john"
find . -group "staff"
find . -perm 755
find . -nouser
find . -nogroup
4.文件大小
-size +n 查找大于 n 字节的文件
-size -n 查找小于 n 字节的文件
-size n 查找等于 n 字节的文件
-size +nk 查找大于 n KB 的文件
-size -nk 查找小于 n KB 的文件
-size nk 查找等于 n KB 的文件
-size +nm 查找大于 n MB 的文件
-size -nm 查找小于 n MB 的文件
-size nm 查找等于 n MB 的文件
find . -type f -size +1000000
find . -type f -size -1000000
find . -type f -size 1000000
find . -type f -size +100k
find . -type f -size -100k
find . -type f -size 100k
find . -type f -size +100m
find . -type f -size -100m
find . -type f -size 100m
5.执行操作
-exec command {} ; 对找到的文件执行命令
-exec command {} + 对找到的文件执行命令(更高效)
-delete 删除找到的文件
-print 打印找到的文件路径(默认行为)
-ls 以 ls -dils 格式列出找到的文件
-ok command {} ; 对找到的文件执行命令,需用户确认
find . -type f -name "*.log" -exec rm -f {} \;
find . -type f -name "*.log" -exec rm -f {} +
find . -type f -name "*.tmp" -delete
find . -type f -print
find . -type f -ls
find . -type f -name "*.log" -ok rm -f {} \;
6.表达式和逻辑
-and 逻辑与
-or 逻辑或
-not 逻辑非
-a 逻辑与(同 -and)
-o 逻辑或(同 -or)
! 逻辑非(同 -not)
find . -type f -name "*.txt" -and -mtime +7
find . -type f -name "*.txt" -or -name "*.log"
find . -type f -not -name "*.txt"
find . -type f -name "*.txt" -a -mtime +7
find . -type f -name "*.txt" -o -name "*.log"
find . -type f ! -name "*.txt"
7.时间过滤参数:
以下是常用的 find 时间过滤参数及其说明:
1.-mtime
根据文件内容修改时间进行过滤。
-mtime n:查找在 n 天内修改过的文件。
-mtime +n:查找在 n 天以前修改过的文件。
-mtime -n:查找在 n 天内修改过的文件。
# 查找 7 天内修改过的文件
find . -type f -mtime -7
# 查找 7 天以前修改过的文件
find . -type f -mtime +7
# 查找正好 7 天前修改过的文件
find . -type f -mtime 7
2.-atime
根据文件最后访问时间进行过滤。
-atime n:查找在 n 天内访问过的文件。
-atime +n:查找在 n 天以前访问过的文件。
-atime -n:查找在 n 天内访问过的文件。
# 查找 7 天内访问过的文件
find . -type f -atime -7
# 查找 7 天以前访问过的文件
find . -type f -atime +7
# 查找正好 7 天前访问过的文件
find . -type f -atime 7
3.-ctime
根据文件状态改变时间进行过滤。
-ctime n:查找在 n 天内状态改变过的文件。
-ctime +n:查找在 n 天以前状态改变过的文件。
-ctime -n:查找在 n 天内状态改变过的文件。
# 查找 7 天内状态变更过的文件
find . -type f -ctime -7
# 查找 7 天以前状态变更过的文件
find . -type f -ctime +7
# 查找正好 7 天前状态变更过的文件
find . -type f -ctime 7
4.-mmin
根据文件内容修改时间(以分钟为单位)进行过滤。
-mmin n:查找在 n 分钟内修改过的文件。
-mmin +n:查找在 n 分钟以前修改过的文件。
-mmin -n:查找在 n 分钟内修改过的文件。
# 查找 30 分钟内修改过的文件
find . -type f -mmin -30
# 查找 30 分钟以前修改过的文件
find . -type f -mmin +30
# 查找正好 30 分钟前修改过的文件
find . -type f -mmin 30
5.-amin
根据文件最后访问时间(以分钟为单位)进行过滤。
-amin n:查找在 n 分钟内访问过的文件。
-amin +n:查找在 n 分钟以前访问过的文件。
-amin -n:查找在 n 分钟内访问过的文件。
# 查找 30 分钟内访问过的文件
find . -type f -amin -30
# 查找 30 分钟以前访问过的文件
find . -type f -amin +30
# 查找正好 30 分钟前访问过的文件
find . -type f -amin 30
6.-cmin
根据文件状态改变时间(以分钟为单位)进行过滤。
-cmin n:查找在 n 分钟内状态改变过的文件。
-cmin +n:查找在 n 分钟以前状态改变过的文件。
-cmin -n:查找在 n 分钟内状态改变过的文件。
# 查找 30 分钟内状态变更过的文件
find . -type f -cmin -30
# 查找 30 分钟以前状态变更过的文件
find . -type f -cmin +30
# 查找正好 30 分钟前状态变更过的文件
find . -type f -cmin 30
# 查找 7 天内修改过的 `.log` 文件并删除
find . -type f -name "*.log" -mtime -7 -exec rm -f {} \;
# 查找 30 分钟内访问过的文件并打印
find . -type f -amin -30 -exec ls -l {} \;
7.按具体时间过滤
-newermt “time” 查找在指定时间戳之后修改的文件。
-newerct “time” 查找在指定时间戳之后状态变更的文件。
-newerat “time” 查找在指定时间戳之后访问的文件。
find . -type f -newermt '2024-01-01 12:00'(查找2024年1月1日12:00之后修改的文件)
find . -type f -newerct '2024-01-01 12:00'(查找2024年1月1日12:00之后状态变更的文件)
find . -type f -newerat '2024-01-01 12:00'(查找2024年1月1日12:00之后访问的文件)
8.按文件比较时间
-newer file 查找比指定文件新(修改时间更近)的文件。
-older file 查找比指定文件旧(修改时间更早)的文件。
find . -type f -newer reference.txt(查找比reference.txt新修改的文件)
find . -type f -older reference.txt(查找比reference.txt旧修改的文件)
9.按时间范围过滤
-newermt “time1” ! -newermt “time2” 查找在两个时间戳之间修改的文件。
find . -type f -newermt '2024-01-01 00:00' ! -newermt '2024-01-01 23:59'(查找2024年1月1日当天修改的文件)
处理错误提示
如果出现类似 find: I cannot figure out how to interpret ‘2024-01-01’ as a date or time 的错误提示,可以尝试以下方法:
检查系统版本:确保使用的 find 命令版本支持 -newermt 参数。
使用脚本包装:将命令放入脚本中执行,以避免直接在命令行中出现解析问题。
10.其他
-depth 深度优先搜索(先搜索子目录)
-maxdepth n 设置最大搜索深度
-mindepth n 设置最小搜索深度
-empty 查找空文件或空目录
-inum n 按 inode 编号查找
-printf format 自定义输出格式
-quit 查找到第一个匹配文件后退出
find . -depthfind . -maxdepth 2
find . -mindepth 1
find . -type f -empty
find . -inum 12345
find . -type f -printf "%p %s\n"
find . -type f -name "file.txt" -print -quit