在UNIX中工作的常見問題之一是找到大檔案來釋放一些空間。假設您的檔案系統已滿,並且您收到警報釋放空間,或者如果主機空間不足,並且您的服務沒辦法啟動,您首先要尋找的是十大檔案,看看是否可以刪除大檔案。如果是Java應用程式或在Tomcat上啟動並執行Web應用程式,那麼可以刪除這些堆檔案釋放出空間,但最重要的問題是如何找到它們。你如何知道檔案系統中最大檔案的大小,在哪個目錄。我們將在本文中嘗試找到其中一些問題的答案。
當我剛剛到Linux時,我沒有別的選擇,只能去日誌目錄,尋找更大的舊檔案並刪除它們。伺服器運行得很好,直到有一天我們的伺服器因為特大的快取檔案被掛掉。無法定位到檔案所在目錄,然後我開始瞭解find命令,且搜尋大檔案的子目錄,如下所示:
$ find . -size +1G
如上命令將從目前的目錄和及子目錄列印出大於1GB的所有檔案。唯一的問題是它不能精確的列印出大小。使用 -printf選項可以解決問題,該選項允許您指定格式String,就像Java的printf()方法一樣。
進一步調整命令來尋找檔案,且精確的列印出檔案大小。
$ find . -size +1G -printf '%s %p\n'
%s表示大小,%p表示路徑。
或者,還可以使用-exec選項在每個檔案上運行ls,find命令返回且列印其大小,如下所示:
$ find . -size +100M -exec ls -sh {} \;
這個命還算可以,夠用。讓我們接著看看更好的一種用法,如下命
$ du -a . | sort -n -r | head -n 1016095096 .13785288 ./logs6095380 ./logs/app2125252 ./temp2125244 ./temp/data2125240 ./temp/data/app
此命令以排序的方式列出了大小前10的目錄和檔案,如此一天就很容易定位到大檔案所在位置
翻譯:http://www.java67.com/2017/08/how-to-find-large-files-with-size-in-Linux.html