GNU/Linux >> Linux Esercitazione >  >> Linux

Elencare le directory in base alle dimensioni dal più grande al più piccolo su un'unica riga

Se sei sicuro che i nomi delle directory non contengano spazi bianchi, allora è semplice ottenere tutti i nomi delle directory su una riga:

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

Ottenere le informazioni in Python

Se vuoi catturare quell'output in un programma Python e trasformarlo in un elenco. Usando python2.7 o superiore:

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

In 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()

Possiamo anche sfruttare le funzionalità di Python per ridurre la quantità di lavoro svolto dalla shell e, in particolare, per eliminare la necessità di awk :

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

Si potrebbe andare oltre e leggere il du output direttamente in python, convertire le dimensioni in numeri interi e ordinare in base alle dimensioni. È più semplice, però, farlo solo con sort -nr nella shell.

Specificare una directory

Se le directory di cui vuoi la dimensione non sono nella directory corrente, ci sono due possibilità:

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

e anche:

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

La differenza tra questi due è se /some/path è incluso o meno nell'output.


Usando paste

du -sk [a-z]* 2>/dev/null | sort -nr| cut -f2- | paste -s -

zsh ha la capacità di ordinare i suoi glob usando i qualificatori globbing. Puoi anche definire i tuoi qualificatori glob con le funzioni. Ad esempio:

zdu() REPLY=$(du -s -- "$REPLY")

print -r -- [[:alpha:]]*(/nO+zdu)

stampa le directory (/ ) il cui nome inizia con una lettera (btw, [a-z] ha senso solo nella versione locale C) numericamente (n) ordinamento inverso (O) usando zdu funzione.

Nota che quando lo fai:

du -s a b

Se a e b contengono collegamenti fisici agli stessi file, il loro utilizzo del disco verrà conteggiato per a ma non per b . Il zsh approccio qui lo evita.

Se hai intenzione di usare Python, farei lo stesso da lì:chiama du -s per ciascuno dei file e ordina l'elenco lì. Ricorda che i nomi dei file possono contenere qualsiasi carattere inclusi spazio, tabulazione e newline.


Linux
  1. Trova i file e le directory più grandi in Linux

  2. Sed rimuove i caratteri dalla nuova riga?

  3. Sposta i file nelle directory in base all'estensione

  4. Avvia file/directory utilizzando Gnome dalla riga di comando

  5. Come posso creare un file con una dimensione specifica da una riga di comando?

Programma hardware dalla riga di comando di Linux

Cerca prodotti Amazon dalla riga di comando

Come creare directory da un file di testo in Linux

Copia un file in più directory dalla riga di comando su Linux

Come eseguire il backup di un singolo database MySQL dalla riga di comando

Invia e-mail in Linux dalla riga di comando