ubuntu的nautilus在删除文件的时候,一般都是把文件移动到所属分区的.Trash
目录下,如果[启用了libtrash](324),在shell中删除的文件也会被移动到$HOME/.Trash
目录中,时间长了以后,这些.Trash
目录的管理是个问题。
直接全部清空显然太简单,我习惯先清除最早删除的文件,以前是用php写了个脚本来作,现在发现使用find命令就完全能够实现了:
find . -mtime +200
这样所有“岁数”大于200天的文件就都找出来了,不过当前目录.
也出来了,去掉它:
find . -mtime +200 ! -name "."
只输出文件名太简单,加上日期和文件大小的输出:
find . -mtime +200 ! -name "." -printf '%T+ %8kK %P\n'
这样就比较完美了,确定想删除这些文件的话,在最后带上-delete
就可以了:
find . -mtime +200 ! -name "." -printf '%T+ %8kK %P\n' -delete
另外,如果想知道清除这些文件能够释放多少空余磁盘空间,可以借助awk来实现:
find . -mtime +200 ! -name "." -printf '%8k\n'|awk '{sum += $1}END{printf "Total %d K.\n", sum}'
在上面所有的find中,使用的都是mtime,也就是文件的最后修改时间,这样有一个小缺点,从网上下载的文件时间一般是服务器上的文件时间,虽然你是2007年下载的,文件的mtime可能会是2002年,这样的文件会被优先删除,不过无所谓了,既然是回收站,既然是从网上下载的,大不了再重新下去,保护我们自己“生产”的文件才是首要任务。
为何不用atime也就是最后访问时间,我觉得这个时间非常不靠谱,比如你用clamscan扫描完病毒之后,所有文件的atime都变成现在了,还有一些莫名的情况,总之不是很稳定,不如mtime让人放心,即使我删除了10天前编辑的文件,它的mtime就一直会是10天前的日期,不会再变的。
另外在实际的使用过程中,还会遇到另外一种情况,目录的日期比较早,而该目录下有比较新的文件,所以find的时候就只把目录find出来了,如果加上-delete
,是不是就把目录删除了?下面那些比较新的文件也都没有了。所以我用这种方式解决:find的之后指定不搜索目录(! -type d
),而在文件清除之后再按照同样的时间条件删除所有空目录(find . -type d -empty -mtime +200 -delete
),减少文件被误删的可能。
基于上面那些,我写了一个简单的脚本方便调用,可从[这里](http://www.archive.org/details/clear_trash_by_time)下载,为了安全,限定只搜索当前目录,并且目录名称必须包含有“Trash”。
实用 太喜欢这些gnu tools了
不错不错,第一步也可以直接用 -type f 判断;或者不用-delete用exec 套rm -f(只删文件不删目录)、rmdir (只删空目录不删文件)
话说回来,ubuntu的这个修改感觉怪怪的~~~就像RH将rm 强制alias 为rm -i 一样,不舒服。。。
用-delete应该比用exec套rm -f快 因为不用开新的进程了