Linux
在linux中按大小排序的通用工具,了解常見的單位後綴
我可以按大小訂購文件/目錄列表:
ls -lS
但是,如果我
du
以人類可讀的格式使用:du --max-depth=1 -h .
我得到:
128K ./something 3,3M ./more 3,2M ./even-more ...
哪個沒有訂購。是否有任何標準工具可以訂購此類數據?標準
sort
似乎不支持這一點。我需要自己動手嗎?
GNU
sort
有一個-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
(注意間距會受到影響)。以上所有假設文件名不包含換行符。
至於關於按大小排序的一般問題, glob
zsh
有一個oL
glob 限定符(請注意,它是按大小,而不是磁碟使用情況)。
ls -S
可以完成(使用 GNUls
表示-U
未排序):ls -ldU -- *(oL)
在符號連結解析後按大小排序:
ls -LldU -- *(-oL) wc -c -- *(-oL)