Prueba esto:
for file in file{18..31}.txt
Se conoce como una "expresión de secuencia" y es parte de la función de expansión de llaves de Bash . Funciona en Bash 3 y 4.
La función de incremento es nueva para Bash 4. Probablemente tenga Bash 3.x.
En Bash 4, puedes hacer:
$ for i in {1..6..2}; do echo $i; done
1
3
5
Pero en Bash 3, debes hacer esto para obtener los mismos resultados:
$ for ((i=1; i<=6; i+=2)); do echo $i; done
La misma forma que se incrementa en uno:
$ for ((i=1; i<=6; i++)); do echo $i; done
Cualquiera de los números pueden ser variables o expresiones. Sin embargo, en una expresión de secuencia, los números tienen que ser constantes
Aquí hay un ejemplo usando ese formulario en sus archivos:
for ((i=18; i<=31; i++))
do
echo "file${i}.txt"
done
Otra nueva característica de las expresiones de secuencia en Bash 4 es la capacidad de incluir ceros a la izquierda. Esto es útil si desea crear (y usar) archivos numerados que puedan ordenarse correctamente.
En Bash 4:
touch file{001..010}.txt
crearía archivos llamados "file001.txt" a través de "file010.txt". Sus nombres se ordenarán en el orden esperado. Sin los ceros a la izquierda, "file10.txt" se ordenaría antes de "file1.txt".
Para trabajar con los archivos, puede usar la misma sintaxis cero inicial:
for file in file{001..010}.txt; do echo "$file"; done
En Bash 3, si necesita ceros a la izquierda, debe rellenar el valor usted mismo:
for i in {1..10}
do
printf -v i '%03d' $i
echo "file${i}.txt"
done
los printf
declaración antepondrá el valor de i con ceros a la izquierda para que el ancho sea 3, por ejemplo ("4" se convierte en "004").
Editar:
Acomodar espacios en los nombres de archivo es sencillo:
$ 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
bucle que permita espacios en los nombres de archivo usando xargs. Parece que funciona si no tienes bash 4. Si tienes bash 4, ¡definitivamente usa expansión de llaves! Ver la respuesta seleccionada. Plug desvergonzado para actualizar Snow Leopard bash