LINUX:帮助我递归搜索整个目录以查找文件的上次访问时间


1

我最近继承了一个linux Web服务器,以前的管理员用来将所有内容基本转储到其中。我想做的是获取目录中所有文件的列表,这些文件按文件的上次访问时间排序,目的是清除公司根本不使用的所有文件。

我假设我应该回溯3个月,因为该公司非常活跃地使用其Web服务,因此过去3个月中未曾碰到的任何事情很可能是无价之宝。

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

但这似乎效果不佳。

请注意,我的Linux管理员经验非常初级。我精通部署和配置,但是我从未做过这样的事情(我的意思是,这件事真是一团糟,非常需要它)。

我不反对将PHP脚本组合起来运行它,但是,同样,我对PHP也不那么热衷,因此我确实需要这里的一些直接帮助。理想情况下,如果我确定发现的所有内容都是垃圾,那么运行一个脚本,该脚本还将具有一个删除文件选项,将是我的工作,甚至是可以包含rm的BASH命令序列。

在此先感谢您提供的所有帮助,我非常感谢。

Answers:


1

第一件事:)备份一切!

出于本示例的目的,我将假定您的文件已/var/www更改为与您的系统上实际相同的文件。

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

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

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

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

列出屏幕上具有修改时间的文件。.这样,您可以确保尝试删除的文件确实要删除的文件正确。您可以将其减少到更少,以便您可以上下滚动:

   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

1

这听起来似乎是find的小巷:

$ cd $ROOT_OF_JUNKYARD
$ find . -atime 90

应该列出最近90天内访问的所有文件。

注意:跟踪atime属性对于文件系统而言会花费一些成本,因此对于支持这样做的文件系统,某些管理员将其关闭(Linux上的ext2确实如此)。如果您的计算机配置为不维护atime,则此方法将不起作用。:|

一旦您满意列出的所有文件都是垃圾文件,就可以简单地扩展命令以删除结果:

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

使其具有交互性-i选项,它将提示您确保每次删除。这是为了保护您免于踩踏,否则使用递归应用的命令将非常容易。rmrm


@undwind,您正在与linux新手交谈...如果他不加关注地逐字关注您,他最终将从自己的主目录中删除一个很大的块。
艾哈迈德·马苏德

@Ahmed:很好,我添加了使其更安全的-i选项rm
放松

我认为mtime不会帮助您。不能修改时间,因为这些是前一段时间写入但仍在使用的文件。必须是访问时间。我假设使用atime而不是mtime可以满足该要求?是?

@MT_Mike:我想是的,我编辑了答案。
放松

@unwind hehe -i +1,但是您忘了将第二行更新为-atime:)
Ahmed Masud
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.