2016-10-24

Calcolare la somma delle dimensioni in byte dei file di una directory

Trattando l'output del comando ls -l con cut e sed si può ottenere la somma delle dimensioni con questo "semplice" comando:
echo $(($(ls -l | sed -e "s/ \+/ /g" | cut -d" " -f5 | paste -s -d+)))
Analizzando il comando si può notare:
  • ls -l per ottenere le informazioni dei file della directory corrente
  • sed per ridurre gli spazio in eccesso tra una colonna e la seguente
  • cut per ottenere solo la quinta colonna impostando lo spazio come separatore
  • paste per unire tutte le linee ottenute in un unica linea separando i valori con un segno +
  • $(.....) per utilizzare l'output dei comandi al suo interno come se fosse un comando
  • $((.....)) per valutare il contenuto come un'espressione aritmetica

Come al solito è uno dei modi per ottenere un risultato, quindi ce ne possono essere tanti altri anche migliori e più performanti.

sed - ridurre una serie di spazi ad uno solo

Quando il contenuto di un file o l'output di un comando ha il testo formattato con spazi in colonne potrebbero esserci un numero indefinito di spazi tra una colonna e la successiva. In questo caso una delle soluzioni per permettere al comando cut di "pescare" una determinata colonna può essere quella di ridurre una serie di spazi in uno solo e con l'opzione -d" " imporre a cut di riconoscere le colonne separate da un solo spazio; per fare ciò con sed si può usare questo comando:
sed -e "s/ \+/ /g"
ad esempio per ridurre gli spazio dell'output del comando ls -l:
ls -l | sed -e "s/ \+/ /g"