find 时间格式说明

ls -l --time=atime /xx
默认 ll 是 mtime
mtime > 修改时间:文件的内容被最后一次修改的时间,我们经常用的 ls -l 命令显示出来的文件时间就是这个时间,当用 vim 对文件进行编辑
之后保存,它的 mtime 就会相应的改变;
atime > 访问时间:对文件进行一次读操作,它的访问时间就会改变。例如像:cat、more 等操作,但是像之前的 state 还有 ls 命令对 atime
是不会有影响的;
ctime > 状态时间:当文件的状态被改变的时候,状态时间就会随之改变,例如当使用 chmod、chown 等改变文件属性的操作是会改变文件
的 ctime 的。
stat瞧一下
ls -l 这个是修改时间 modyfy
ls -lu 这个是 change time
ls -la 这个是 atime
-ctime -n 查找距现在 n*24H 内修改过的文件
-ctime n 查找距现在 n*24H 前, (n+1)*24H 内修改过的文件
-ctime +n 查找距现在 (n+1)*24H 前修改过的文件
清理 /var/log 下所有超过7天的 *.log
find /var/log -type f -name "*.log" -mtime +6 -exec rm -f {} \;
找出 /home 下所有用户能执行但用户自己都不能读的怪胎文件
find /home -type f -perm /u=x ! -perm /u=r -ls
# -perm /u=x: 文件的所有者(user)有执行(x)权限。/表示“包含”,有这个权限位就算。
# ! -perm /u=r: 前面的!表示“取反”,就是找那些所有者没有读(r)权限的文件。能执行但不能读?鬼鬼祟祟!
# -ls: 别光找,给我把详细信息(权限、所有者、大小、时间)像ls -l一样列出来!证据确凿!
空间大扫除:在 /backup ,找出所有超过 100MB 的“巨无霸”,用 gzip 压缩!
find /backup -type f -size +100M -exec gzip -v {} \;
# -size +100M: 目标明确:大于100MB的,都是“打击对象”!+表示“大于”,M是兆字节。想找1G以上的?换成+1G!
# -exec gzip -v {} \; :对于找出的目标直接上压缩!gzip -v一边压还一边告诉你它在压谁(-v 显示详情)。{}代表大文件。
空格克星降临:管你文件名带空格、带括号、带奇葩符号,统统拿下!安全清理当前目录所有 .tmp 垃圾!
find . -name "*.tmp" -print0 | xargs -0 rm -f
# -print0: 这是find的大招!它不用空格或换行分隔文件名,而是用NULL字符 (\0)!任你文件名里有什么妖魔鬼怪(空格、换行、引号),NULL字符都能完美分割,绝不误伤!
# | xargs -0: xargs接招!-0 告诉它:“兄弟,前面来的数据是用NULL分隔的,按这个规矩来!” 完美搭档!
找名字里带“project2023”或者“project2024”的文件夹
find /data -type d -regex ".*/project202[34].*"
# -regex: 开启正则表达式模式!比简单的-name强大N倍!
# ".*/project202[34].*":
# .*:匹配任意字符任意次(路径前面的部分)
# /:匹配路径分隔符
# project202[34]:匹配 project2023 或 project2024 ([34] 表示匹配3或4)
# .*:匹配后面的任意字符(目录名可能还有后缀)
清理空文件夹
find . -type d -empty -exec rmdir {} \;
# -type d -empty: 目标明确:类型是目录(d),并且是空的(empty)!一个文件都没有的,才够格被清理!
# -exec rmdir {} \;: 对找到的空目录执行rmdir命令。注意:rmdir只能删空目录,配合-empty使用,安全无忧!
批量修改权限
find /opt/important_app -type f -name "*.conf" -exec chmod 644 {} \;
# -exec chmod 644 {} \;: 对找到的每一个.conf文件,执行chmod 644命令。
# 644 代表:用户(u:owner)有读写(rw-),组(g)和其他人(o)只有读(r--)。安全又规范!
代码里藏了密码?紧急排查!find + grep 王炸组合
find /src -type f -name "*.py" -exec grep -Hn "password =" {} \;
# -exec grep -Hn "password =" {} \;:
# grep:文本搜索神器。
# -H:打印匹配行所在的文件名。必须的!不然谁知道在哪?
# -n:打印匹配行的行号。精准定位!
# "password =":要搜索的字符串(这里只是举例,实际按需修改)。
# {}:find找到的每一个.py文件。
看哪个目录最吃空间
find /var -maxdepth 1 -mindepth 1 -type d -exec du -sh {} \; | sort -hr
# -maxdepth 1 -mindepth 1: 只查/var直接下一级的目录(-mindepth 1排除/var自身)。
# -type d: 只找目录。
# -exec du -sh {} \;: 对每个找到的目录,用du -sh计算并显示其总大小(-s summary总计, -h human-readable 人类可读格式,如K, M, G)。
# | sort -hr: 把du的结果通过管道(|)送给sort排序。-h表示按人类可读的大小排(能识别K, M, G),-r表示从大到小(Reverse)。
精确时间点搜索
# 时间神探:在 /etc 目录下,找出所有在 2025-06-24 14:30:00 之后被修改过的文件!
find /etc -type f -newermt "2024-06-24 14:30:00"
# 或者:找出所有在 120 分钟(2小时)内被访问过的文件!
find /etc -type f -amin -120
# -newermt: 找修改时间(mtime)比指定时间戳("2024-06-24 14:30:00") 新的文件。还有-newerat(访问时间), -newerct(状态变更时间)。
# -amin -120: 找访问时间(atime)在 120分钟之内 (-表示之内) 的文件。类似的有-cmin(状态变更时间), -mmin(修改时间)。