find 入门:按名字、时间和大小在 Linux 里找文件
文件不知道放哪了,是 Linux 新手最常遇到的问题之一。与其一层层目录翻,不如直接让 find 帮你找:它从指定目录出发,递归遍历子目录,按你给的条件筛出结果。
按名字找
最基本的用法是按名字找。find /home -name “*.log”,就是在 /home 下面找所有以 .log 结尾的文件。注意引号不能省:不加引号,星号会先被 shell 展开,找出来的就不是你想要的了。名字大小写不确定时,把 -name 换成 -iname,它会忽略大小写,Find、FIND 都能命中。
按类型筛
按类型筛也很有用。-type f 只要普通文件,-type d 只要目录。比如想找某个目录下所有子目录:find /home/user -type d。配合名字一起用,条件之间默认是“并且”关系,写在一起就行。
按时间找
按时间找文件是排障时的利器。-mtime -7 表示 7 天内修改过的文件,-mtime +30 表示 30 天前修改过的。想找最近一周内改过的配置文件:find /etc -mtime -7 -type f。清理旧日志时反过来用 +30,先列出来确认一遍再删,别直接上 -delete。
按大小筛
按大小筛同样直观。-size +100M 找出大于 100M 的文件,-size -10k 找出小于 10k 的。磁盘快满时,先用 find / -size +500M -type f 2>/dev/null 看看大文件都在哪,末尾的 2>/dev/null 是把无权限目录的报错屏蔽掉,输出干净很多。
找到之后直接处理
找到之后想直接处理,可以加 -exec。比如把找到的临时文件列出来:find /tmp -name “*.tmp” -exec ls -lh {} ;。这里的 {} 代表每个找到的文件,分号表示命令结束,分号前要加反斜杠转义。刚开始用时先不加 -delete,先用 -print 或 -exec ls 确认结果,确认无误再动手删,这是避免误删的习惯。
控制递归深度
最后提醒一点:find 默认会进子目录递归找,如果只想看当前目录一层,加 -maxdepth 1 限制深度,速度快、结果也干净。
掌握名字、类型、时间、大小这四个条件,再加 -exec 做后续处理,日常找文件基本够用了。
- 点赞
- 收藏
- 关注作者
评论(0)