GNU/Linux >> Znalost Linux >  >> Linux

Výpis adresářů na základě velikosti od největšího po nejmenší na jednom řádku

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.


Linux
  1. Sed Odebrat znaky z nového řádku?

  2. Jak odstranit jeden řádek z historie?

  3. Vypište štítky oddílů z příkazového řádku

  1. Prohledávejte torrenty z příkazového řádku v Linuxu

  2. fdisk - oddíl na jednom řádku

  3. Clonezilla z příkazového řádku

  1. Jak odstranit soubory a adresáře v Linuxu z příkazového řádku

  2. Najděte největší soubory a adresáře v Linuxu

  3. Výstup z Ls má nové řádky, ale zobrazuje se na jednom řádku. Proč?