Enviado em 24/10/2018 - 10:19h
Olá todos,
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:
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:
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
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
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.
#!/bin/bash
find -iname "*.pdf" | while read line
do
((count++))
# altera nome de cada ficheiro pdf que encontra
mv $line $count".pdf"
done
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:
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
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;
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