Voglio rinominare tutti i file in una cartella con PREFIX+COUNTER+FILENAME
ad es.
input:
england.txt
canada.txt
france.txt
uscita:
CO_01_england.txt
CO_02_canada.txt
CO_03_france.txt
Risposta accettata:
Questo fa quello che chiedi:
n=1; for f in *.txt; do mv "$f" "CO_$((n++))_$f"; done
Come funziona
-
n=1Questo inizializza la variabile
na 1. -
for f in *.txt; doQuesto avvia un ciclo su tutti i file nella directory corrente i cui nomi terminano con
.txt. -
mv "$f" "CO_$((n++))_$f"Questo rinomina i file in modo che abbiano il
CO_prefisso conncome contatore. Il++il simbolo dice a bash di incrementare la variabilen. -
doneQuesto segnala la fine del ciclo.
Miglioramento
Questa versione utilizza printf che consente un maggiore controllo su come verrà formattato il numero:
n=1; for f in *.txt; do mv "$f" "$(printf "CO_%02i_%s" "$n" "$f")"; ((n++)); done
In particolare, il %02i format metterà uno zero iniziale prima del numero quando n è ancora a una cifra.