1. 程式人生 > >用shell查找某目錄下的最大文件(轉)

用shell查找某目錄下的最大文件(轉)

log 異常 nbsp 過濾 exe -type 信息 int div

這是一個很有趣的問題,因為作為一個shell菜鳥,我第一時間是沒有任何想法的。心裏納悶為什麽這樣的操作Linux居然沒有直接的命令實現這樣的查詢。

很自然地,第一感覺就是用awk去實現,因為菜鳥我看awk看得傻了:

ls -l | awk ‘/^[^d]/ {print $5,$9}‘ | sort -nr | head -1

明顯ls查看完整的文件信息,過濾掉d開頭的東東(目錄),取出文件大小$5和名字$9兩項,排序,取第一個

很自然問題就變的清晰,值得討論的是怎麽實現前面過濾出文件大小和名字這一個過程。後面的sort和head不管用什麽方法都一樣的。

baidu這個問題,發現某論壇裏有大神的回答。主要是針對連子目錄都能查詢的。因為大神用了find命令:

find -type f -exec stat -c "%s %n" {} \; | sort -nr | head -1

缺省路徑是當前目錄裏,執行命令stat,同樣是返回大小(以byte為單位的)和名字,blah blah。註意stat不是state就是了,某菜鳥表示每次都敲錯。

後來在某本基礎教材看到另外一個途徑,用了du命令,異常膜拜:

du -s * | sort -nr | head -1

比前面awk簡單很多。-s參數會返回當前目錄裏的文件的大小,*會drill down出每個文件的大小,不包括目錄的總大小。

不過呢,後面還是仔細學習了一下,發現這個方法是把子目錄作為一個文件來看待的。所以最大文件可能是某個子目錄,而不是某個文件。好處是,du的可以設置size顯示的單位,比較傻瓜的是直接用-h參數,所謂的human-readable的形式。

所以綜上所述,還是前面兩個命令好了,第一個是只查詢根目錄最大文件,第二個是遞歸到每個子目錄裏找出最大文件。至於du往往會涉及到子目錄的總和,所以第三個命令的功能是:查詢當前目錄下,最大的文件或者目錄。

轉自:http://www.cnblogs.com/loveglory/archive/2012/11/29/2794790.html

用shell查找某目錄下的最大文件(轉)