递归搜索整个目录以查找文件的最后访问时间

递归搜索整个目录以查找文件的最后访问时间

我最近继承了一个 Linux 网络服务器,以前的管理员基本上把所有东西都转储到这个服务器中。我想要做的是获取目录中所有文件的列表,按上次访问时间排序,目的是清除公司根本不使用的文件。

我估计我应该回溯到 3 个月前,因为该公司非常活跃于他们的网络服务,所以过去 3 个月内根本没有动过的任何内容很可能是无用的。

我尝试使用其中的答案:https://stackoverflow.com/questions/5566310/how-to-recursively-find-and-list-the-latest-modified-files-in-a-directory-with-s

但效果似乎不太好。

需要说明的是,我的 Linux 管理经验非常初级。我精通部署和配置,但我从未做过这样的事情(我的意思是,这东西真的很乱,非常需要它)。

我并不反对编写一个 PHP 脚本来运行它,但是,我也不是那么擅长 PHP,所以我真的需要一些直接的帮助。理想情况下,如果有一个脚本可以运行,并且还带有删除文件选项,那将让我感到很开心,或者甚至有一个 BASH 命令序列,如果我认为它找到的所有内容都是垃圾,则可以包含 rm。

答案1

首先要做的事情:)备份所有内容!

为了举个例子,我假设你的文件已经更改/var/www为你的系统上的实际情况。

    tar fcvz www-backup.tar.gz /var/www 

将在 tar 文件中创建现有 Web 环境的备份(如果出现问题,您可以随时检索丢失的文件)

现在查找大约 90 天未访问的文件:

    cd /var/www
    find . -atime 90 -type f -ls

在屏幕上列出文件及其修改时间。这样您就可以确保您尝试删除的文件确实是您想要删除的文件。您可以将其通过管道传输到 less,以便您可以上下滚动:

   find . -atime 90 -type f -ls | less

使用向上和向下箭头查看列表,退出输入“q”。

如果一切正常:

    pwd

确保您仍处于正确的工作目录中。

    find . -atime 90 -type f echo rm -f {}  \; > doit.sh 

这将创建一个名为 doit.sh 的文件,其中实际上包含删除命令。

再读一遍:

    less doit.sh 

如果所有文件看起来都可以删除,那么您可以运行它:

    sh doit.sh

答案2

这听起来不错找到的胡同:

$ cd $ROOT_OF_JUNKYARD
$ find . -atime 90

应列出过去 90 天内访问的所有文件。

笔记: 跟踪atime属性对于文件系统来说成本有点高,因此有些管理员会关闭它,对于支持这样做的文件系统(Linux 上的 ext2 就支持)。如果您的机器配置为不维护atime,则此方法将不起作用。:|

一旦您确定列出的所有文件都是垃圾,您就可以轻松地扩展命令来删除结果:

$ find . -mtime 90 -exec rm -i \{\} \;

选择-i这样rm交互的,它会提示你确认每个删除操作。这是为了防止你被炸掉脚,否则使用递归应用的rm命令很容易发生这种情况。

相关内容