首页 / Linux 命令行入门教程 / 33. find(二)时间、大小、权限与 -exec

Linux 命令行入门教程

33. find(二)时间、大小、权限与 -exec

本教程共 90 篇 · 第 33 篇

33. find(二)时间、大小、权限与 -exec

上章讲了按名字和类型找。这章讲按时间、大小和权限筛,再用 -exec 对找到的结果批量干活。

按修改时间用 -mtime,单位是天。-7 表示 7 天内,+7 表示超过 7 天,7 表示正好第 7 天那一轮:

find ~ -type f -mtime -7

按大小用 -size+ 大于,- 小于;M 兆字节,k 千字节,G 吉字节:

find / -type f -size +100M

按权限位找用 -perm(权限位含义见 §40):

find . -type f -perm 644

找空文件或空目录用 -empty

find ~ -empty

-exec 对每一个找到的结果执行一条命令。{} 代表当前文件名,\; 表示命令结束:

find . -name "*.tmp" -exec rm {} \;
Warning

上面这条会立刻真删文件,而且删了找不回。动手前,先跑一遍不带 -exec 的同样 find,确认命中的是哪些文件。想逐条确认,把 rm 换成 rm -i;或者先用 -print 列出来看看。

也可以批量改名:

find . -name "*.txt" -exec mv {} {}.bak \;

\; 换成 +,可以让 find 把多个文件一次传给命令,更快:

find . -name "*.log" -exec grep "ERROR" {} +
Tip

要删大量文件,也可以配合 xargs(见 §34):find . -name "*.tmp" -print0 | xargs -0 rm,更稳妥。

小结:-mtime / -size / -perm 负责筛选,-exec 接命令做批量处理。凡是涉及删除,先确认列表再执行。