find 是 Linux 系统中最强大且常用的文件查找命令之一,它可以根据各种条件(如文件名、类型、大小、修改时间等)在目录树中查找文件。
find [路径] [选项] [操作]
如果不指定路径,默认从当前目录开始搜索。
# 查找当前目录下名为 file.txt 的文件
find . -name "file.txt"
# 查找 /home 目录下所有 .jpg 文件
find /home -name "*.jpg"
# 不区分大小写查找
find . -iname "file.txt"
# 查找所有目录
find . -type d
# 查找所有普通文件
find . -type f
# 查找所有符号链接
find . -type l
# 查找大于 10MB 的文件
find . -size +10M
# 查找小于 1KB 的文件
find . -size -1k
# 查找大小在 1MB 到 10MB 之间的文件
find . -size +1M -size -10M
# 查找 7 天内修改过的文件
find . -mtime -7
# 查找 30 天前访问过的文件
find . -atime +30
# 查找 24 小时内状态改变的文件
find . -ctime -1
# 查找权限为 644 的文件
find . -perm 644
# 查找可执行文件
find . -perm /u=x,g=x,o=x
# 查找属于用户 bob 的文件
find . -user bob
# 查找属于组 staff 的文件
find . -group staff
# 查找 .txt 文件且大于 1MB
find . -name "*.txt" -size +1M
# 查找 .jpg 或 .png 文件
find . \( -name "*.jpg" -o -name "*.png" \)
# 查找非目录文件
find . ! -type d
# 删除找到的文件(谨慎使用)
find . -name "*.tmp" -delete
# 显示文件详细信息
find . -name "*.conf" -ls
# 对找到的文件执行命令
find . -name "*.bak" -exec rm {} \;
# 使用 xargs 处理结果
find . -name "*.log" | xargs ls -l
# 最多搜索 3 层子目录
find . -maxdepth 3 -name "file.txt"
# 至少搜索 2 层子目录
find . -mindepth 2 -name "file.txt"
# 使用正则表达式匹配
find . -regex ".*/file[0-9]+\.txt"
# 查找时排除 node_modules 目录
find . -name "*.js" -not -path "./node_modules/*"
find . -type f -empty -delete
find /var/log -name "*.log" -size +1M -exec gzip {} \;
find . -type f -printf '%T+ %p\n' | sort -r | head -10
find . -type f -exec md5sum {} + | sort | uniq -w32 -dD
find 命令功能非常强大,以上只是常用功能的介绍。可以通过 man find
查看完整的文档和更多选项。