Prova questo:
for file in file{18..31}.txt
È noto come "espressione di sequenza" e fa parte della funzione di espansione del controvento di Bash . Funziona in Bash 3 e 4.
La funzione di incremento è una novità di Bash 4. Probabilmente hai Bash 3.x.
In Bash 4, puoi fare:
$ for i in {1..6..2}; do echo $i; done
1
3
5
Ma in Bash 3, devi farlo per ottenere gli stessi risultati:
$ for ((i=1; i<=6; i+=2)); do echo $i; done
Lo stesso modulo incrementa di uno:
$ for ((i=1; i<=6; i++)); do echo $i; done
Qualsiasi numero può essere variabile o espressione. Tuttavia, in un'espressione sequenza i numeri devono essere costanti
Ecco un esempio usando quel modulo sui tuoi file:
for ((i=18; i<=31; i++))
do
echo "file${i}.txt"
done
Un'altra nuova caratteristica delle espressioni di sequenza in Bash 4 è la possibilità di includere zeri iniziali. Ciò è utile se si desidera creare (e utilizzare) file numerati che possono essere ordinati correttamente.
In Bash 4:
touch file{001..010}.txt
creerebbe i file denominati "file001.txt" tramite "file010.txt". I loro nomi verranno ordinati nell'ordine previsto. Senza gli zeri iniziali, "file10.txt" si ordina prima di "file1.txt".
Per lavorare con i file, è possibile utilizzare la stessa sintassi zero iniziale:
for file in file{001..010}.txt; do echo "$file"; done
In Bash 3, se hai bisogno di zeri iniziali, devi aggiungere tu stesso il valore:
for i in {1..10}
do
printf -v i '%03d' $i
echo "file${i}.txt"
done
Il printf
istruzione anteporrà il valore di i con zeri iniziali, quindi la larghezza è 3, ad esempio ("4" diventa "004").
Modificare:
Accomodare gli spazi nei nomi dei file è semplice:
$ touch "space name "{008..018..3}" more spaces"
$ ls -l sp*
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000008 more spaces
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000011 more spaces
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000014 more spaces
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000017 more spaces
$ for f in "space name "{008..018..3}" more spaces"; do mv "$f" "${f}.txt"; done
$ ls -l sp*
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000008 more spaces.txt
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000011 more spaces.txt
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000014 more spaces.txt
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000017 more spaces.txt
for
ciclo che consenta spazi nei nomi dei file usando xargs. Sembra funzionare se non hai bash 4. Se hai bash 4, usa sicuramente l'espansione del controvento! Vedi la risposta selezionata. Spina spudorata per aggiornare Snow Leopard bash