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


這是一個很有趣的問題,因為作為一個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往往會涉及到子目錄的總和,所以第三個命令的功能是:查詢當前目錄下,最大的文件或者目錄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM