Linux

在linux中按大小排序的通用工具,了解常見的單位後綴

  • July 27, 2018

我可以按大小訂購文件/目錄列表:

ls -lS

但是,如果我du以人類可讀的格式使用:

du --max-depth=1 -h .

我得到:

128K    ./something
3,3M    ./more
3,2M    ./even-more
...

哪個沒有訂購。是否有任何標準工具可以訂購此類數據?標準sort似乎不支持這一點。我需要自己動手嗎?

GNUsort有一個-h/--human-numeric-sort選項和h排序鍵標誌來處理這些(它期望基於 1024 的單元(在 1K 之前排序 1023),這恰好也是 GNUdu的計數方式。

現在請注意,使用 時會失去一些精度du -h,因此順序可能最終會出錯:

$ du -k a b
1212    a
1208    b
$ du -h a b | sort -h
1.2M    a
1.2M    b

正如@StephenKitt 所提到的,您可以通過告訴您提供完整的精度並僅在使案例如 GNU 進行排序後du轉換為人類numfmt格式來解決它:

$ du --block-size=1 a b | sort -n | numfmt --to=iec
1.2M b
1.2M a

(注意間距會受到影響)。以上所有假設文件名不包含換行符。

至於關於按大小排序的一般問題, globzsh 有一個oLglob 限定符(請注意,它是按大小,而不是磁碟使用情況)。

ls -S可以完成(使用 GNUls表示-U未排序):

ls -ldU -- *(oL)

在符號連結解析後按大小排序:

ls -LldU -- *(-oL)
wc -c -- *(-oL)

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