Bash

使用 find 按大小對所有文件進行排序

  • March 15, 2018

作為實踐,我需要完成一個腳本,該腳本使用給定的副檔名(例如.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 但包括子目錄的輸出。

任何finds 可以做 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

這對我來說很好

引用自:https://unix.stackexchange.com/questions/430381