Utente:L1q1d/Sandbox

Da Slacky.eu.

Script su liste di file

Introduzione

Questo articolo presenta come è possibile lavorare su una serie di file in sequenza presenti in una cartella senza dover intervenire su ognuno dei file manualmente.

Script

Scheletro

Lo scheletro dello script su cui si basa la guida è:

for nome in qualcosa
do
...
done

È bene tenere bene a mente la sintassi. È possibile scriverlo anche così:

for nome in qualcosa; do; ...; done

Il qualcosa definisce l'elenco dei file che quindi può essere definito in precedenzo o in alternativa può diventare * (tutti i file nella cartella) o *.estensione (tutti i file corrispondenti a questa estensione).

$nome

A questo punto possiamo scrive la prima versione di uno script che per esempio installa tutti i file in una directory:

su
for nome in *.tgz
do
installpkg $nome
done

Banelmente la variabile nome definisce il nome del file. Può essere in alcuni casi necessario specificare l'indirizzo completo e quindi possiamo usare $PWD/ ottenendo così il nome completo $PWD/$nome

Modificare l'estensione

Molte volte ci capita di dover cambiare l'estensione a un file o all'output di un programma (convertire tutti i file da png a jpg, da wav a mp3 ecc). Per togliere l'estesione possiamo usare basename in questo modo:

newname=`basename $nome \.estensione`

in questo modo se avessimo il file "il mio avatar.png" e volessimo farlo diventare "il mio avatar.jpg":

newname=`basename $nome \.png`.jpg

Su una lista di mp3:

for i in *.mp3
do
newname=`basename $i \.wav`.mp3
lame -V2 $i $newname
done

Modificare il nome

Per modificare il nome si può usare tr