Digamos que tenho um monte de fotos, todas com informações EXIF corretas, e as fotos são nomeadas aleatoriamente (por causa de um problema que tive). Eu tenho um pequeno programa chamado jhead
que me dá a saída abaixo:
$ jhead IMG_9563.JPG
File name : IMG_9563.JPG
File size : 638908 bytes
File date : 2011:02:03 20:25:09
Camera make : Canon
Camera model : Canon PowerShot SX210 IS
Date/Time : 2011:02:03 20:20:24
Resolution : 1500 x 2000
Flash used : Yes (manual)
Focal length : 5.0mm (35mm equivalent: 29mm)
CCD width : 6.17mm
Exposure time: 0.0080 s (1/125)
Aperture : f/3.1
Focus dist. : 0.29m
ISO equiv. : 125
Exposure bias: -1.67
Whitebalance : Manual
Light Source : Daylight
Metering Mode: pattern
Exposure Mode: Manual
Agora preciso renomear todas as fotos na pasta no próximo formato:
001.JPG
002.JPG
003.JPG
...
Onde o número menor seria a imagem mais antiga e o máximo a mais nova.
Eu não sou tão bom em scripts, por isso estou pedindo ajuda.
Eu acho que um script bash é suficiente, mas se você se sentir mais confortável, poderá escrever um script python.
Eu pensei em algo como:
$ mv IMG_9563.JPG `jhead IMG_9563.JPG | grep date`
mas não sei como fazer isso para todos os arquivos de uma só vez.
ls *.JPG | wc > rename
E então eu teria que usar um script renomeado para XXX.JPGwc
, eu esqueci o que pedir pelo nome.Respostas:
Você pode fazer isso para todos os arquivos usando um loop for (no shell / em um script de shell):
Este é apenas um esboço muito básico. Exclua
echo
quando tiver verificado que tudo funciona conforme o esperado.fonte
File date : 2011:02:03 20:25:09
. Como posso filtrar apenas a segunda coluna?j=`jhead "$i" | grep date | sed 's/.* //'`.jpg
em vez de?'
antes de `` .jpg` 'Acabei de descobrir aqui que o jhead pode fazer tudo por você! :)
fonte
%i
(ou%03i
, especificamente) fornecerá um número de sequência, conforme solicitado na pergunta original. Combinar ambos pode não ser uma má ideia.Se alguém precisar renomear mais complexo, por exemplo, para incluir os principais valores de exposição no nome do arquivo, aqui está meu pequeno script. Ele renomeia os arquivos JPEG para algo como isto:
NightSky_2014.08.27_22.30.05_NX20_F2.8_f20.0mm_20s_ISO800.jpg
.fonte
Gostei do código postado por maxschlepzig, mas ainda assim tive dificuldades com a saída.
O problema foi o espaço no nome do arquivo resultante (entre a sequência de datas e a sequência de horas). Embora seja trivial para quem usa uma GUI, torna o tratamento de arquivos na linha de comando um pouco mais difícil.
Aqui o comando 'sed' foi substancialmente alterado para quatro operações 'sed' separadas em favor do argumento monolítico anterior. Para me adequar, o seguinte também altera o arquivo para permissões 644 normais.
fonte
sed
muito bem, então basicamente entendo o que você está tentando fazer. Mas nosso objetivo no Stack Exchange não é distribuir sanduíches de peixe ou escrever milhares de soluções pontuais para perguntas trivialmente distintas; nosso objetivo é ensinar as pessoas a pescar (ou seja, ensinar as pessoas, incluindo o questionador atual e futuros leitores, a resolver seus próprios problemas). Para esse fim, sua resposta seria melhor se você explicasse o que está se esforçando. (Por favor, não responda nos comentários; edite sua resposta para torná-la mais clara.)… (Continua)Como é mais fácil lidar com (imho), escrevi para mim mesmo um script Ruby:
O que isso faz?
Repete todos os arquivos passados como parâmetros (por exemplo
*.JPG
).Eu verifiquei se ele lida com arquivos e vídeos RAW corretamente. Deve funcionar com tudo o que
exiftool
pode lidar.Não faz nada se um arquivo
exiftool
relata um erro ouIsso o torna bastante robusto. Em particular, nenhum arquivo pode desaparecer (silenciosamente), como é o caso de algumas das outras respostas.
fonte
exiv2
seria uma alternativa para manipulação, que permite uma sintaxe muito simples:Portanto, isso renomeará todos os jpegs na pasta atual:
Se você também deseja adicionar informações geográficas, pode usar
exivtool
:fonte
Eu gosto da solução do @ Kevin, já que eu também queria manter o nome original (evitando problemas com imagens tiradas no mesmo segundo), eis a minha solução:
fonte
Primeira postagem do novato ... Primeiro script do bash ... Gostei da solução Libor / HalosGhost acima, pois inclui mais detalhes na renomeação. Mas, após o teste, nomes de arquivos duplicados acabariam perdendo arquivos. Então, adicionei uma tag de contador no final do nome do arquivo para facilitar a referência e a prevenção de colisões. Estou certo de que alguém aqui pode melhorar isso, mas achei que poderia ajudar.
Minhas desculpas por postar o código. Estou tendo dificuldades com a interface, mas se alguém pudesse me indicar uma maneira correta de fazer as coisas, isso seria ótimo.
fonte