Per sapere cosa cancellare, può essere utile il comando
du -sk nome1 nome2 ...
dove du sta per "disk usage", -s indica al comando di sommare tutte
le dimensioni degli oggetti contenuti in nomen
(questa opzione serve in particolare quando l'oggetto esaminato
è una directory), e infine -k indica al comando di rappresentare
il risultato, occupazione di nomen, in termini di
kilobyte.
Un esempio di utilizzo:
% du -sk ardea.tex Wordsi può vedere che il file ardea.tex occupa 36 kilobyte, mentre la directory Word occupa, insiema a tutto il proprio contenuto, oltre 52 megabyte.
36 ardea.tex
52037 Word
%
% du -s *otteniamo qualcosa di simile a quanto desideriamo, ma la shell sostituisce alla wildcard * soltanto i file non-invisibili, mentre noi vorremmo vedere tutti i file/directory presenti, compresi quelli invisibili. Sapendo che, per convenzione, i file invisibili hanno nome preceduto dal carattere ".", proviamo il comando
% du -s * .*In questo caso, oltre ai file/directory invisibili, abbiamo qualcosa di più, ovvero il risultato relativo alla directory corrente, che in *nix è designata convenzionalmente dal nome ".", e fin qui poco male, ma anche il risultato relativo alla directory parente della dirextory corrente, convenzionalmente denominata "..", e questo è un risultato indesiderato, perché la directory parente della mia home directory contiene le home directory di tutti gli utenti, ed esaminare tutte le home directory per calcolarne l'occupazione totale è pesantissimo per l'unità disco, per la rete e per la workstation locale, ed è, soprattutto, inutile.
% du -sk $(ls -A)
% du -sk $(ls -A) | sort -n
L'opzione -n indica a sort di ordinare numericamente
in ordine
crescente le linee di input, e quindi il risultato di questo ultima
linea di comando è una lista di coppie occupazione-nome ordinata
secondo l'occupazione, con le occupazioni maggiori in fondo alla lista,
ovvero davanti ai vostri occhi...
Esattamente quanto desideravamo!
ls -A | while read f ; do du -sxk "$f" ; done | sort -nche rispetto alla versione precedente opera correttamente anche con nomi che contengono degli spazi. Secondo voi, perché questa versione funziona e l'altra no?
ls -A | while read f ; do du -sxk "$f" ; done | sort -ne identificare la directory più cospicua, selezionarla, rieseguire il comando, identificare i file e le directory più cospicue, decidere cosa rimuovere e cosa tenere, ritornare alla home o scendere di livello a seconda della situazione, rieseguire il comando, etc etc, fino a raggiunta soddisfazione...