Pokud jste si jisti, že názvy adresářů neobsahují mezery, je snadné získat všechny názvy adresářů na jeden řádek:
du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
Získání informací do pythonu
Pokud chcete zachytit tento výstup v programu python a udělat z něj seznam. Používáte python2.7 nebo lepší:
import subprocess
dir_list = subprocess.check_output("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True).split()
V pythonu 2.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()
Můžeme také využít funkce pythonu ke snížení množství práce odvedené shellem a zejména k odstranění potřeby awk
:
subprocess.Popen("du -sk [a-z]*/ | sort -nr", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].split()[1::2]
Dalo by se jít dále a přečíst si du
výstup přímo do pythonu, převod velikostí na celá čísla a řazení podle velikosti. Jednodušší je to však udělat pomocí sort -nr
ve skořápce.
Určení adresáře
Pokud adresáře, jejichž velikost chcete, nejsou v aktuálním adresáři, existují dvě možnosti:
du -sk /some/path/[a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
a také:
cd /some/path/ && du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
Rozdíl mezi těmito dvěma je, zda /some/path
je nebo není součástí výstupu.
Pomocí paste
du -sk [a-z]* 2>/dev/null | sort -nr| cut -f2- | paste -s -
zsh
má schopnost třídit své koule pomocí globbingových kvalifikátorů. Můžete také definovat své vlastní kvalifikátory glob s funkcemi. Například:
zdu() REPLY=$(du -s -- "$REPLY")
print -r -- [[:alpha:]]*(/nO+zdu)
vytiskne adresáře (/
), jehož jméno začíná písmenem (mimo jiné [a-z]
má smysl pouze v národním prostředí C) číselně (n) zpětně seřazené (O) pomocí zdu
funkce.
Všimněte si, že když to uděláte:
du -s a b
Pokud a
a b
obsahují pevné odkazy na stejné soubory, jejich využití disku se bude počítat za a
ale ne pro b
. zsh
přístup zde se tomu vyhýbá.
Pokud budete používat python, udělal bych totéž:zavolejte du -s
pro každý ze souborů a seřadit tam tento seznam. Pamatujte, že názvy souborů mohou obsahovat jakýkoli znak včetně mezery, tabulátoru a nového řádku.