天天看點

使用 Find 指令來幫你找到那些需要清理的檔案

使用 Find 指令來幫你找到那些需要清理的檔案

credit: sandra h-s

有一個問題幾乎困擾着所有的檔案系統 -- 包括 unix 和其他的 -- 那就是檔案的不斷積累。幾乎沒有人願意花時間清理掉他們不再使用的檔案和整理檔案系統,結果,檔案變得很混亂,很難找到有用的東西,要使它們運作良好、維護備份、易于管理,這将是一種持久的挑戰。

我見過的一種解決問題的方法是建議使用者将所有的資料碎屑建立一個檔案集合的總結報告或"概況",來報告諸如所有的檔案數量;最老的,最新的,最大的檔案;并統計誰擁有這些檔案等資料。如果有人看到五年前的一個包含五十萬個檔案的檔案夾,他們可能會去删除哪些檔案 -- 或者,至少會歸檔和壓縮。主要問題是太大的檔案夾會使人擔心誤删一些重要的東西。如果有一個描述檔案夾的方法能幫助顯示檔案的性質,那麼你就可以去清理它了。

當我準備做 unix 檔案系統的總結報告時,幾個有用的 unix 指令能提供一些非常有用的統計資訊。要計算目錄中的檔案數,你可以使用這樣一個 find 指令。

<code>$ find . -type f | wc -l</code>

<code>187534</code>

雖然查找最老的和最新的檔案是比較複雜,但還是相當友善的。在下面的指令,我們使用 find 指令再次查找檔案,以檔案時間排序并按年-月-日的格式顯示,在清單頂部的顯然是最老的。

在第二個指令,我們做同樣的,但列印的是最後一行,這是最新的。

<code>$ find -type f -printf '%t+ %p\n' | sort | head -n 1</code>

<code>2006-02-03+02:40:33 ./skel/.xemacs/init.el</code>

<code>$ find -type f -printf '%t+ %p\n' | sort | tail -n 1</code>

<code>2015-07-19+14:20:16 ./.bash_history</code>

printf 指令輸出 %t(檔案日期和時間)和 %p(帶路徑的檔案名)參數。

如果我們在查找家目錄時,無疑會發現,history 檔案(如 .bash_history)是最新的,這并沒有什麼用。你可以通過 "un-grepping" 來忽略這些檔案,也可以忽略以.開頭的檔案,如下圖所示的。

<code>$ find -type f -printf '%t+ %p\n' | grep -v "\./\." | sort | tail -n 1</code>

<code>2015-07-19+13:02:12 ./isprime</code>

尋找最大的檔案使用 %s(大小)參數,包括檔案名(%f),因為這就是我們想要在報告中顯示的。

<code>$ find -type f -printf '%s %f \n' | sort -n | uniq | tail -1</code>

<code>20183040 project.org.tar</code>

統計檔案的所有者,使用%u(所有者)

<code>$ find -type f -printf '%u \n' | grep -v "\./\." | sort | uniq -c</code>

<code>180034 shs</code>

<code>7500 jdoe</code>

如果檔案系統能記錄上次的通路日期,也将是非常有用的,可以用來看該檔案有沒有被通路過,比方說,兩年之内沒通路過。這将使你能明确分辨這些檔案的價值。這個最後通路(%a)參數這樣使用:

<code>$ find -type f -printf '%a+ %p\n' | sort | head -n 1</code>

<code>fri dec 15 03:00:30 2006+ ./statreport</code>

當然,如果大多數最近​​通路的檔案也是在很久之前的,這看起來你需要處理更多檔案了。

<code>$ find -type f -printf '%a+ %p\n' | sort | tail -n 1</code>

<code>wed nov 26 03:00:27 2007+ ./my-notes</code>

要想層次分明,可以為一個檔案系統或大目錄建立一個總結報告,顯示這些檔案的日期範圍、最大的檔案、檔案所有者們、最老的檔案和最新通路時間,可以幫助檔案擁有者判斷目前有哪些檔案夾是重要的哪些該清理了。

原文釋出時間為:2015-08-08

本文來自雲栖社群合作夥伴“linux中國

繼續閱讀