Possuo um directorio, com vários pdf e pastas com mais pdf, onde pretendo renomear todos esses pdf's. Tudo está "pendurado" em um só directório. O objectivo é renomear o nome do arquivo para um número. No final terei, por exemplo, 300 arquivos pdf cujo os nomes serão:
1.pdf
2.pdf
...
500.pdf
501.pdf
Para isso construí este script:
#!/bin/bash
find -iname "*.pdf" | while read line
do
((count++))
# altera nome de cada ficheiro pdf que encontra
mv $line $count".pdf"
done
Acontece que uma vez renomeados os ficheiros não consigo renomear mais vezes os mesmos ficheiros. Pois vai sempre existir uma numeração que coincide. Significa que ele vai renomear o ficheiro 22.pdf para o ficheiro 22.pdf. O que resulta em ficheiros perdidos.
Tenho estado a pensar no seguinte. O script procura apenas ficheiros pdf. É um dos requisitos, pois apenas pretendo que o nome dos ficheiros pdf seja alterados. Agora falta fazer com que apenas o script altere ficheiros cujo o nome ainda não foi alterado. Pois uma vez atribuido o nome 55.pdf este não pode ser alterado mais nenhuma vez! (o número vai funcionar como um index para identificar os pdf's). Pensei em detectar se o nome do ficheiro era apenas composto por números. Pois inicialmente o ficheiro tem um nome normal. Após edição é que pretendo que fique algo do genero "8.pdf". Sei que existe maneira de fazer isso em expressões regulares, algo como \d.
O que falta no script que estou a construir, penso que seja a validação se o ficheiro tem o nome composto por numeros ou não. Algo do genero:
1-Detecta todos os ficheiros pdf no directorio;
2-Detecta se o nome se encontra entre 1 até infinito (primeiro porque não sei quantos pdf já foram renomeados, segundo porque preciso de detectar se o ficheiro já foi renomeado em vezes anteriores;
3-Se o nome do ficheiro já é algo como "45.pdf" então não faz nada. Caso seja um nome, incluindo espaços, então pesquisa qual é o último numero para nome de pdf que existe e atribui o seguinte;
Este passo 3 no algoritmo é importante. Pois vamos imaginar que tenho 500 pdf no directorio. Todos tem o nome algo do genero (1.pdf, 2.pdf ... 52.pdf ....) O novo pdf que cai no directorio terá que receber o numero 501.pdf
Para não alongar mais o post, vou aguardas as vossas sugestões. Pois ideias não faltam :) Por exemplo, posso passar todos os nomes do ficheiros pdf para um array. Ordernar o array. Nas últimas posições vão ficar os nomes que não números. Varrer essas posições e alterar para numeros. A numeração começava num numero após a última posição existente no array.
Lá está, ideias não faltam. Falta é conseguir passar isso tudo para shellscript e talvez utilizar expressões regulares :)
Obrigado