Bash
使用 find 按大小對所有文件進行排序
作為實踐,我需要完成一個腳本,該腳本使用給定的副檔名(例如.txt)按大小對所有填充進行排序,包括子目錄中的那些。
For example; ./ex1.sh einstein txt einstein/copyright.txt einstein/do-how.txt einstein/etext9/bil11.txt einstein/etext9/2ws271.txt einstein/etext9/liber11.txt einstein/etext0/bib0010h/Readme.txt einstein/etext0/kknta10.txt
我不能使用 du 或其他高級命令。在某些時候我需要使用查找,我嘗試過這樣的事情
find -depth - type f -name "*.$extension" | sort ....
但這並沒有很好地工作,因為我真的不知道如何按大小對它們進行排序,我得到的唯一結果是按名稱排序的。
我正在尋找類似於 ls -lhS 但包括子目錄的輸出。
任何
find
s 可以做 AFAIK 的唯一排序是讓內容出現在包含目錄之前(-depth
選項)。您將使用其他東西來按大小排序。如果您有 GNU find,請嘗試:
find . -type f -iname "*.$extension" -printf "%s %p\n" | sort -n | sed 's/^[0-9]* //'
-printf "%s %p\n"
列印大小和文件路徑,然後我們按數字排序,然後使用sed
.
我用
find . -type f -iname "*.$extension" -print0 | xargs -0 ls -lS
這對我來說很好