Ci sono molte risposte qui, molte delle quali sono duplicati. Vedo tre tendenze: passare in rassegna un secondo du call, usare un complicato codice shell / awk e usare altre lingue.
Ecco una soluzione conforme a POSIX che utilizza du e awk che dovrebbe funzionare su ogni sistema.
Ho adottato un approccio leggermente diverso, aggiungendo -x
per assicurarmi di rimanere sullo stesso filesystem (ho sempre bisogno di questa operazione quando ho poco spazio su disco, quindi perché eliminare le cose che ho montato all'interno di questo albero FS o spostato e symlinked back?) e visualizzazione di unità costanti per facilitare l'analisi visiva. In questo caso, in genere scelgo di non ordinare in modo da poter vedere meglio la struttura gerarchica.
sudo du -x | awk '
$1 > 2^20 { s=$1; $1=""; printf "%7sG%s\n", sprintf("%.2f",s/2^21), $0 }'
(Poiché si tratta di unità coerenti, si può quindi aggiungere | sort -n
se si vuole veramente sorta risultati ndr).
Ciò filtra qualsiasi directory il cui contenuto (cumulativo) non superi i 512 MB e quindi visualizza le dimensioni in gigabyte. Per impostazione predefinita, du utilizza una dimensione di blocco di 512 byte (quindi la condizione di awk di 2 20 blocchi è 512 MB e il suo divisore 2 21 converte le unità in GB - potremmo usare du -kx
con $1 > 512*1024
e s/1024^2
per essere più leggibili dall'uomo). All'interno della condizione awk, abbiamo impostato s
le dimensioni in modo da poterlo rimuovere dalla linea ( $0
). Ciò mantiene il delimitatore (che viene compresso in un singolo spazio), quindi il finale %s
rappresenta uno spazio e quindi il nome della directory aggregata. %7s
allinea la %.2f
dimensione GB arrotondata (aumenta a %8s
se hai> 10 TB).
A differenza della maggior parte delle soluzioni qui, questo supporta correttamente le directory con spazi nei loro nomi (anche se ogni soluzione, compresa questa, gestirà in modo errato i nomi delle directory che contengono le interruzioni di riga).