我最近继承了一个 Linux 网络服务器,以前的管理员基本上把所有东西都转储到这个服务器中。我想要做的是获取目录中所有文件的列表,按上次访问时间排序,目的是清除公司根本不使用的文件。
我估计我应该回溯到 3 个月前,因为该公司非常活跃于他们的网络服务,所以过去 3 个月内根本没有动过的任何内容很可能是无用的。
但效果似乎不太好。
需要说明的是,我的 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
命令很容易发生这种情况。