Tente o seguinte:
for file in file{18..31}.txt
É conhecida como "expressão de sequência" e faz parte do recurso de expansão de chaves do Bash . Funciona no Bash 3 e 4.
O recurso de incremento é novo no Bash 4. Você provavelmente tem o Bash 3.x.
No Bash 4, você pode:
$ for i in {1..6..2}; do echo $i; done
1
3
5
Mas no Bash 3, você precisa fazer isso para obter os mesmos resultados:
$ for ((i=1; i<=6; i+=2)); do echo $i; done
O mesmo formulário incrementado em um:
$ for ((i=1; i<=6; i++)); do echo $i; done
Qualquer um dos números pode ser variável ou expressão. No entanto, em uma expressão de sequência, os números devem ser constantes
Aqui está um exemplo usando esse formulário em seus arquivos:
for ((i=18; i<=31; i++))
do
echo "file${i}.txt"
done
Outro novo recurso das expressões de sequência no Bash 4 é a capacidade de incluir zeros à esquerda. Isso é útil se você deseja criar (e usar) arquivos numerados que podem ser classificados corretamente.
No Bash 4:
touch file{001..010}.txt
criaria arquivos denominados "file001.txt" a "file010.txt". Seus nomes serão classificados na ordem esperada. Sem os zeros à esquerda, "file10.txt" seria classificado antes de "file1.txt".
Para trabalhar com os arquivos, você pode usar a mesma sintaxe zero inicial:
for file in file{001..010}.txt; do echo "$file"; done
No Bash 3, se você precisar de zeros à esquerda, precisará preencher o valor sozinho:
for i in {1..10}
do
printf -v i '%03d' $i
echo "file${i}.txt"
done
A printf
instrução precederá o valor de i com zeros à esquerda para que a largura seja 3, por exemplo ("4" se torna "004").
Editar:
A acomodação de espaços nos nomes de arquivos é simples:
$ 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
loop que permite espaços nos nomes de arquivos usando xargs. Parece funcionar se você não tiver o bash 4. Se você tiver o bash 4, use definitivamente a expansão de chaves! Veja a resposta selecionada. Plug Shameless para atualizar o Snow Leopard bash