Le utility Linux, sono come gli oggetti nella tasca di Eta Beta
L’esempio di sponge
Passano gli anni e non finisco mai di scoprire le utility del mondo Linux. Anzi preciso meglio: utility del mondo Linux che mi tornano utili.
La più recente è sponge. Quando l’ho scoperta, per caso, ho letto la descrizione e ho pensato “e allora?”; mi sembrava totalmente inutile.
Però il sito che me l’ha fatta adocchiare è “figo”, quindi sospettavo fossi tonto io a non capirne l’utilità. Era così, e leggi e rileggi, ho capito anche io perché.
Quando nella shell di Linux scrivi su file — cat ./input.csv >./output.csv
— il file di output viene subito creato e gradualmente “riempito” con i dati che riga per riga arriveranno dall’input.
Quindi se ad esempio voglio applicare il comando head
a un file per estrarre le prime 10 righe e sovrascriverlo, lo distruggerò, perché viene creato subito e quindi sarà vuoto. Il comando <./input.csv head >./input.csv
sarebbe distruttivo.
sponge
risolve questo problema: prima di creare l’output si prende in memoria tutto ciò che gli arriva e poi crea il file. Quindi può anche sovrascrivere l’input, perché lo farà “a cose fatte”:
<./input.csv head | sponge ./input.csv
Tante volte — se l’utility usata non ce l’ha tra le opzioni — per sovrascrivere un file a valle di un processo è necessario creare un file temporaneo. sponge
dà la possibilità di non farlo.
Occhio: mette tutto in memoria, quindi attenzione alle dimensioni dell’input.