使用 Find 命令來幫你找到那些需要清理的文件
![](https://linuxstory.org/wp-content/uploads/2024/06/224048z01gtgxpzxm88w58-620x400.png)
Credit: Sandra H-S
有一個問題幾乎困擾著所有的文件系統 -- 包括 Unix 和其他的 -- 那就是文件的不斷積累。幾乎沒有人願意花時間清理掉他們不再使用的文件和整理文件系統,結果,文件變得很混亂,很難找到有用的東西,要使它們運行良好、維護備份、易於管理,這將是一種持久的挑戰。
我見過的一種解決問題的方法是建議使用者將所有的數據碎屑創建一個文件集合的總結報告或"概況",來報告諸如所有的文件數量;最老的,最新的,最大的文件;並統計誰擁有這些文件等數據。如果有人看到五年前的一個包含五十萬個文件的文件夾,他們可能會去刪除哪些文件 -- 或者,至少會歸檔和壓縮。主要問題是太大的文件夾會使人擔心誤刪一些重要的東西。如果有一個描述文件夾的方法能幫助顯示文件的性質,那麼你就可以去清理它了。
當我準備做 Unix 文件系統的總結報告時,幾個有用的 Unix 命令能提供一些非常有用的統計信息。要計算目錄中的文件數,你可以使用這樣一個 find 命令。
$ find . -type f | wc -l
187534
雖然查找最老的和最新的文件是比較複雜,但還是相當方便的。在下面的命令,我們使用 find 命令再次查找文件,以文件時間排序並按年-月-日的格式顯示,在列表頂部的顯然是最老的。
在第二個命令,我們做同樣的,但列印的是最後一行,這是最新的。
$ find -type f -printf '%T+ %pn' | sort | head -n 1
2006-02-03+02:40:33 ./skel/.xemacs/init.el
$ find -type f -printf '%T+ %pn' | sort | tail -n 1
2015-07-19+14:20:16 ./.bash_history
printf 命令輸出 %T(文件日期和時間)和 %P(帶路徑的文件名)參數。
如果我們在查找家目錄時,無疑會發現,history 文件(如 .bash_history)是最新的,這並沒有什麼用。你可以通過 "un-grepping" 來忽略這些文件,也可以忽略以.開頭的文件,如下圖所示的。
$ find -type f -printf '%T+ %pn' | grep -v "./." | sort | tail -n 1
2015-07-19+13:02:12 ./isPrime
尋找最大的文件使用 %s(大小)參數,包括文件名(%f),因為這就是我們想要在報告中顯示的。
$ find -type f -printf '%s %f n' | sort -n | uniq | tail -1
20183040 project.org.tar
統計文件的所有者,使用%u(所有者)
$ find -type f -printf '%u n' | grep -v "./." | sort | uniq -c
180034 shs
7500 jdoe
如果文件系統能記錄上次的訪問日期,也將是非常有用的,可以用來看該文件有沒有被訪問過,比方說,兩年之內沒訪問過。這將使你能明確分辨這些文件的價值。這個最後訪問(%a)參數這樣使用:
$ find -type f -printf '%a+ %pn' | sort | head -n 1
Fri Dec 15 03:00:30 2006+ ./statreport
當然,如果大多數最近訪問的文件也是在很久之前的,這看起來你需要處理更多文件了。
$ find -type f -printf '%a+ %pn' | sort | tail -n 1
Wed Nov 26 03:00:27 2007+ ./my-notes
要想層次分明,可以為一個文件系統或大目錄創建一個總結報告,顯示這些文件的日期範圍、最大的文件、文件所有者們、最老的文件和最新訪問時間,可以幫助文件擁有者判斷當前有哪些文件夾是重要的哪些該清理了。
via: http://www.itworld.com/article/2949898/linux/profiling-your-file-systems.html
作者:Sandra Henry-Stocker 譯者:strugglingyouth 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive