Linux

根據單行從大到小的大小列出目錄

  • March 16, 2020

我可以使用以下命令來獲取目錄列表及其大小,並將它們從大到小排序(在範例中,我將目錄重命名為數字以便更容易理解)。

$: du -sk [a-z]* 2>/dev/null | sort -nr
413096  one
106572  two
97452   three
76428   four
55052   five
45068   six
33680   seven
23220   eight
17716   nine

我正在編寫一個程序,該程序需要從最大到最小輸入這些目錄,但為了方便起見,它需要將它們全部放在一行上。是否有一個命令可以讓我在沒有大小的情況下在一行上從最大到最小對目錄進行排序?

我希望輸出是這樣的:

one two three four five six seven eight nine

如果您確信目錄名稱不包含空格,那麼在一行中獲取所有目錄名稱很簡單:

du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'

將資訊輸入python

如果您想在 python 程序中擷取該輸出並將其放入列表中。使用python2.7或更好:

import subprocess
dir_list = subprocess.check_output("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True).split()

在python2.6中:

import subprocess
subprocess.Popen("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True, stdout=subprocess.PIPE).communicate()[0].split()

我們還可以利用 python 的特性來減少 shell 完成的工作量,特別是消除對awk

subprocess.Popen("du -sk [a-z]*/ | sort -nr", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].split()[1::2]

可以更進一步,將du輸出直接讀入 python,將大小轉換為整數,然後按大小排序。但是,它更簡單,只需sort -nr在 shell 中執行此操作。

指定目錄

如果你想要大小的目錄不在目前目錄中,有兩種​​可能:

du -sk /some/path/[a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'

並且:

cd /some/path/ && du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'

這兩者之間的區別在於是否/some/path包含在輸出中。

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