Skip to main content

find 命令详解

find 是 Linux/Unix 系统中一个非常强大的文件搜索工具,可以根据多种条件查找文件和目录。

基本语法

find [路径] [选项] [操作]

常用选项

按名称查找

  • -name:按文件名查找(区分大小写)
    find /home -name "*.txt"
    
  • -iname:按文件名查找(不区分大小写)
    find /home -iname "*.TXT"
    

按类型查找

  • -type:按文件类型查找
    • f:普通文件
    • d:目录
    • l:符号链接
    find /var -type d
    

按时间查找

  • -mtime:按修改时间查找(天数)
    find / -mtime -7  # 7天内修改过的文件
    find / -mtime +30 # 30天前修改过的文件
    
  • -mmin:按修改时间查找(分钟)
    find / -mmin -60  # 60分钟内修改过的文件
    
  • -atime:按访问时间查找
  • -ctime:按状态变更时间查找

按大小查找

  • -size:按文件大小查找
    find / -size +1G    # 大于1GB的文件
    find / -size -100k  # 小于100KB的文件
    find / -size 50M    # 等于50MB的文件
    

按权限查找

  • -perm:按权限查找
    find / -perm 644      # 精确匹配644权限的文件
    find / -perm -644     # 至少包含644权限的文件
    find / -perm /u=r     # 用户有读权限的文件
    

按用户/组查找

  • -user:按所有者查找
    find / -user root
    
  • -group:按所属组查找
    find / -group www-data
    

执行操作

基本操作

  • -print:打印结果(默认操作)
  • -ls:以ls格式显示结果
    find /tmp -type f -ls
    

删除文件

  • -delete:删除找到的文件
    find /tmp -name "*.tmp" -delete
    

执行命令

  • -exec:对找到的文件执行命令
    find . -name "*.bak" -exec rm {} \;
    find /var/log -name "*.log" -exec gzip {} \;
    

组合条件

  • -a-and:与(默认)
  • -o-or:或
  • !-not:非
  • ():组合条件(需要转义)
find / \( -name "*.jpg" -o -name "*.png" \) -size +1M

实用示例

  1. 查找并删除空文件:

    find /tmp -type f -empty -delete
    
  2. 查找最近修改的PHP文件:

    find /var/www -name "*.php" -mtime -1
    
  3. 查找所有可执行文件:

    find / -type f -perm /a=x
    
  4. 查找并更改权限:

    find /home -type f -perm 777 -exec chmod 644 {} \;
    
  5. 查找大文件并排序:

    find / -type f -size +100M -exec ls -lh {} + | sort -k5 -rh
    

find 命令功能非常强大,上述只是常用功能的介绍。可以通过 man find 查看完整手册。