Linux 技巧:按文件年龄列出文件

简介

你是否想过,如何在一个目录中找到那些很久都没有动过的文件?无论你是在清理旧文件、归档数据,还是检查过期文件,Linux 的find命令就是你的首选解决方案。在本技巧中,我们将展示如何使用一个简单而强大的命令,按年龄列出 Linux 中的文件。


命令

find /path/to/files -type f -name '*.jpg' -mtime +30 -exec ls -l {} \;

借助此命令,你可以根据文件的最后修改日期定位文件,按类型或名称筛选文件,并显示有关文件的详细信息。


逐项解析

1. /path/to/files

它指定要搜索的目录。请将其替换为你想浏览的实际文件夹路径。

  • 示例:如果你想搜索你的照片库,请使用~/Pictures.

2. -type f

-type选项指定要搜索的项目类型。

  • f:仅指文件(忽略目录)。

3. -name '*.jpg'

它会根据文件名或扩展名筛选结果。

  • 示例:*.jpg会查找以.jpg.
  • 你可以将其替换为其他模式,例如*.txt表示文本文件,*.log表示日志文件。

4. -mtime +30

这是按文件年龄筛选文件的关键。

  • +30:查找 30 天前最后修改过的文件。
  • 将30替换为任意数字,以满足你的需求:
    • 1 年:使用-mtime +365.
    • 1 周:使用-mtime +7.

5. -exec ls -l {} \;

它告诉 Linux 如何处理找到的文件。

  • -exec:对每个文件执行一条命令。
  • ls -l:列出每个文件的详细信息(例如大小、权限、所有者和最后修改日期)。
  • {}:找到的每个文件的占位符。
  • \;:表示命令结束。

专业提示

想在不运行ls -l的情况下测试命令?省略-exec部分:

find /path/to/files -type f -name '*.jpg' -mtime +30

这样只会列出文件路径,不会显示其他详细信息。


为什么使用这个命令?

find命令用途非常广泛,对系统维护任务非常有用:

  • 释放磁盘空间:识别并删除旧文件。
  • 归档较早的数据:将数月或数年未动过的文件移至备份存储。
  • 监控过期文件:检查关键目录中的过期文件。

实际示例

示例 1:查找旧文档

搜索.docx文件。目标文件夹:Documents,查找超过 90 天未修改的文件:

find ~/Documents -type f -name '*.docx' -mtime +90 -exec ls -l {} \;

示例 2:查找超过 6 个月的大文件

查找大于 100MB 的文件,位置:/home/user,查找超过 6 个月未修改的文件:

find /home/user -type f -size +100M -mtime +180 -exec ls -lh {} \;
  • -size +100M:筛选大于 100MB 的文件。
  • ls -lh:以人类可读的格式显示文件大小(例如 MB、GB)。

示例 3:搜索旧 PDF 文件

查找.pdf文件,位置:/home/user/Downloads,查找最近一年内未修改的文件:

find ~/Downloads -type f -name '*.pdf' -mtime +365 -exec ls -l {} \;

示例 4:查找最近修改过的文件

搜索.txt文件,查找最近 7 天内修改过的文件,位置:/var/www:

find /var/www -type f -name '*.txt' -mtime -7 -exec ls -l {} \;
  • -mtime -7:查找最近 7 天内修改过的文件。

示例 5:删除旧临时文件

删除以下位置的文件:/tmp中超过 30 天未修改的文件:

find /tmp -type f -mtime +30 -exec rm {} \;
  • rm:删除文件。
  • 警告:请谨慎使用,因为这会永久删除文件。

示例 6:归档旧媒体文件

移动.mp4文件(超过 60 天),源文件夹:~/Videos,目标为归档文件夹:

find ~/Videos -type f -name '*.mp4' -mtime +60 -exec mv {} ~/Archives/ \;
  • mv:将文件移动到指定文件夹。

示例 7:查找在特定时间范围内创建的文件

搜索.log文件,查找 30 到 60 天前创建的文件,位置:/var/log:

find /var/log -type f -name '*.log' -mtime +30 -mtime -60 -exec ls -l {} \;
  • -mtime +30:超过 30 天的文件。
  • -mtime -60:最近 60 天内修改过的文件。

示例 8:查找超过 1 周的空文件

查找以下位置的空文件:/home/user中最近一周未修改的文件:

find /home/user -type f -empty -mtime +7 -exec ls -l {} \;
  • -empty:筛选大小为零的文件。

示例 9:按访问时间搜索文件

查找.png文件,位置:/var/www/html,查找最近 90 天内未访问过的文件:

find /var/www/html -type f -name '*.png' -atime +90 -exec ls -l {} \;
  • -atime:按访问时间而非修改时间筛选文件。

示例 10:查找最近创建的文件

查找以下位置的文件:/home/user中最近 3 天内创建的文件:

find /home/user -type f -ctime -3 -exec ls -l {} \;
  • -ctime:按创建时间筛选文件。

示例 11:按权限查找文件

搜索以下位置的文件:/etc中具有特定权限的文件(例如,可被其他人写入):

find /etc -type f -perm /o+w -exec ls -l {} \;
  • -perm /o+w:查找可被其他人写入的文件。

示例 12:查找最近一小时内修改过的文件

查找以下位置中最近一小时内修改过的文件:/home/user/Documents:

find ~/Documents -type f -mmin -60 -exec ls -l {} \;
  • -mmin -60:筛选最近 60 分钟内修改过的文件。

示例 13:查找具有特定所有权的文件

搜索属于以下用户的文件:jose,位置:/var/log中超过 90 天未修改的文件:

find /var/log -type f -user jose -mtime +90 -exec ls -l {} \;
  • -user jose:筛选属于指定用户的文件。

示例 14:排除特定目录

查找.jpg文件,位置:/home/user中超过 30 天的,排除Downloads文件夹:

find /home/user -type f -name '*.jpg' -mtime +30 -not -path "~/Downloads/*" -exec ls -l {} \;
  • -not -path:排除指定目录中的文件。

示例 15:查找在特定日期修改过的文件

搜索以下位置中恰好 10 天前修改过的文件:/home/user:

find /home/user -type f -mtime 10 -exec ls -l {} \;
  • -mtime 10:查找恰好 10 天前修改过的文件。

示例 16:查找具有特定扩展名的文件

搜索.zip和.tar.gz文件,查找超过 60 天的文件,位置:/backups:

find /backups -type f \( -name '*.zip' -o -name '*.tar.gz' \) -mtime +60 -exec ls -l {} \;
  • \( -name '*.zip' -o -name '*.tar.gz' \):搜索多个文件扩展名。

结论

Linux 的find命令是根据文件的年龄、类型和名称管理文件的强大工具。无论你是在清理磁盘空间、归档旧数据,还是监控过期文件,此命令都能让你完全掌控自己的目录。

今天就试试它,让你的 Linux 技能更上一层楼!

发表评论