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=1
Questo inizializza la variabile
n
a 1. -
for f in *.txt; do
Questo 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 conn
come contatore. Il++
il simbolo dice a bash di incrementare la variabilen
. -
done
Questo 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.