Disk-Usage

為什麼排序 du -h 沒有按預期工作?

  • August 26, 2020

我正在嘗試使用人類可讀標誌對 du 命令的輸出進行排序,我得到的結果僅按忽略副檔名的數值排序(即 G、M、K …),而在刪除 -h 時標記結果是否符合預期。

:~/du_exmp$ du -h ./* | sort -n
1.0M    ./file2.txt
2.0G    ./file3.txt
52K    ./file1.txt
:~/du_exmp$ du  ./* | sort -n
104 ./file1.txt
2048    ./file2.txt
4204192 ./file3.txt

問題的根源是什麼,如何解決?

試試sort -h。從手冊-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)

用於sort --help更好地了解命令選項。

問題是你所看到的是如何sort -n工作的。它只查看一行的初始前導數值(或更一般地說,如果您使用-k,則為一個欄位)並對其進行排序。它根本不理解KMG後綴,所以當它遇到它們時它只是停止尋找一個數字。

最簡單的事情就是你在第二個例子中所做的:只使用du沒有-h標誌並且sort完全自然地工作。

如果您真的想保留更易於閱讀的du -h輸出,則必須使用另一個中間管道階段將解碼後的數字添加到 的輸出中du,然後對其進行排序,然後可選擇刪除排序鍵,以便輸出看起來像那樣從du

另一種選擇是使用 plain du,像在第二個範例中那樣對輸出進行排序,然後將該輸出通過管道傳輸到另一個階段以對純整數進行編碼du -h

傳統上,您會使用awk最後兩個想法,但perlorpython也可以。

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