Geralmente importo fotos e vídeos (principalmente com extensões JPG e MOV) de câmeras digitais e tablets para o meu PC e, idealmente, gostaria de vê-los classificados de acordo com as datas e horas em que foram tiradas já presentes nos dados EXIF. E, portanto, meu desejo de renomeá-los todos, de preferência usando um script Nautilus simples, inserindo preferencialmente os carimbos de data e hora antes de cada nome de arquivo.
Até agora, consegui apenas reunir o seguinte script Nautilus, que acredito estar longe de ser perfeito:
for i in *.*
do
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}')_"$i""
done
O que eu não gosto nesse método de renomeação são os dois pontos usados nos carimbos de data e hora EXIF (por exemplo, "2013: 09: 03 20: 55: 09_IMG_0108.JPG"), que podem criar problemas ao transferir esses arquivos posteriormente para outros ambientes ( por exemplo, Windows).
Este comando (usando o exiv2 em vez do exiftool ) habilita convenientemente a manipulação de carimbos de data e hora, mas sua desvantagem é que ele não funciona em arquivos de vídeo (por exemplo, MOV) :
exiv2 -k -r '%Y-%m-%d_%H-%M-%S_:basename:' rename "$i"
Então, espero que alguém possa encontrar uma solução melhor. E seria mágico se ele conseguisse converter os nomes de arquivos e extensões originais em minúsculas também!
Respostas:
Você pode executar o esquema de nomenclatura
sed
para substituir os dois pontos por hífens e espaços por sublinhados, da seguinte maneira:Quanto a tornar a coisa toda em minúscula, você pode usar
rename
:Ou você pode fazê-lo em seu script usando
sed
, como em:... e use a
$j
variável no lugar da final$i
da suamv
linha. Essa maneira sed é um pouco mais portátil (se isso for importante para você), pois diferentes distros linux têm diferentes comandos de renomeação, enquanto sed é universal.Ou, alternativamente, o script pode ser modificado da seguinte maneira para executar a conversão do nome do arquivo para minúscula no início usando
tr
:Para executar comandos ligeiramente diferentes para diferentes tipos de arquivo, uma instrução bash case pode ser usada neste script. Por exemplo:
Neste exemplo, a renomeação de arquivos MOV com registros de data e hora de CreateDate QUALQUER NÚMERO DE HORAS APÓS OU ANTES DE arquivos JPG é ajustada usando outros dados EXIF (-tur) e removendo esse sufixo de diferença de horário, e pode ser necessário alterar a parte -tur de acordo com o local definido no sistema.
fonte
$i
para$j
não fazer nada). Em vez disso, inseri a conversão do nome do arquivo em minúscula no início e tomei a liberdade de adicionar isso como outra opção (que funcionou pelo menos para mim) ao final da sua resposta, para que eu possa aceitá-la. Claro que você pode editar sua resposta ainda mais, conforme desejar.Eu precisava renomear minhas fotos e encontrei esta pergunta aqui - acabei de descobrir que
exiftool
lida com isso de forma nativa:From http://www.sno.phy.queensu.ca/~phil/exiftool/filename.html
Se você deseja acompanhar o nome do arquivo original e escrever em minúsculas a extensão:
O mesmo funciona também com o nome do arquivo inteiro em minúsculas:
fonte
Sei que você disse que preferia um script, no entanto, se você está aberto para um aplicativo Java gratuito, pode usar o AmoK Exif Sorter
fonte
Eu usaria
krename
para isso. istofonte
O pyrenamer não funcionará no meu novo Ubuntu 16.04 instalado; portanto, também tenho que encontrar outra maneira de resolver esse problema.
Eu tenho arquivos como IMG_0001.JPG, IMG_0002.JPG, ... em uma pasta. Verifique este site, /programming/917260/can-var-parameter-expansion-expressions-be-nested-in-bash
Instale o "exiv2" primeiro e escrevi a seguinte linha de comando:
para img em $ (ls *. [Jj] [Pp] [Gg] 2> / dev / null); exiv2 -r '% Y% m% d_% H% M% S _' "$ (tmp = $ {img %%. *}; echo $ {tmp ## * _})" renomeie "$ img"; feito
Os nomes dos arquivos de saída são AAAAMMDD_HHMMSS_0001.JPG, AAAAMMDD_HHMMSS_0002.JPG, ... etc. Até as fotos foram tiradas no mesmo segundo, o número de série da foto original fará a diferença.
fonte