Linux
根據單行從大到小的大小列出目錄
我可以使用以下命令來獲取目錄列表及其大小,並將它們從大到小排序(在範例中,我將目錄重命名為數字以便更容易理解)。
$: 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
包含在輸出中。