歡迎您光臨本站 註冊首頁

Ubunru中按時間清除回收站中的文件

←手機掃碼閱讀     火星人 @ 2014-03-26 , reply:0

ubuntu的nautilus在刪除文件的時候,一般都是把文件移動到所屬分區的.Trash目錄下,如果啟用了libtrash,在shell中刪除的文件也會被移動到$HOME/.Trash目錄中,時間長了以後,這些.Trash目錄的管理是個問題。

直接全部清空顯然太簡單,我習慣先清除最早刪除的文件,以前是用php寫了個腳本來作,現在發現使用find命令就完全能夠實現了:

find . -mtime +200

這樣所有「歲數」大於200天的文件就都找出來了,不過當前目錄.也出來了,去掉它:

find . -mtime +200 ! -name "."

只輸出文件名太簡單,加上日期和文件大小的輸出:

find . -mtime +200 ! -name "." -printf '%T+ %8kK %Pn'

這樣就比較完美了,確定想刪除這些文件的話,在最後帶上-delete就可以了:

find . -mtime +200 ! -name "." -printf '%T+ %8kK %Pn' -delete

另外,如果想知道清除這些文件能夠釋放多少空餘磁碟空間,可以藉助awk來實現:

find . -mtime +200 ! -name "." -printf '%8kn'|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),減少文件被誤刪的可能。

基於上面那些,我寫了一個簡單的腳本方便調用,可從這裡下載,為了安全,限定只搜索當前目錄,並且目錄名稱必須包含有「Trash」。

[火星人 ] Ubunru中按時間清除回收站中的文件已經有298次圍觀

http://coctec.com/docs/linux/show-post-182525.html