Se eu renomear imagens via exiv para a data e hora exif, faça o seguinte:
find . -iname \*jpg -exec exiv2 -v -t -r '%Y_%m_%d__%H_%M_%S' rename {} \;
Agora, pode acontecer que as fotos tenham exatamente o mesmo carimbo de data / hora (incluindo segundos). Como posso tornar o nome do arquivo exclusivo automaticamente?
O comando deve ser estável no sentido de que, se eu o executar na mesma estrutura de diretório novamente (talvez após adicionar novas imagens), as imagens já renomeadas não deverão mudar e se forem adicionadas imagens com nomes de arquivos já existentes, os novos nomes de arquivos deverão ser exclusivos também.
Minha primeira tentativa foi apenas deixar o nome da base original no nome do arquivo resultante, mas o comando não seria estável no sentido acima.
command-line
exif
aluna
fonte
fonte
mv
o arquivo.exiftool '-filename<createdate' -d %Y_%m_%d__%H_%M_%S%%-c.%%le "-filemodifydate<createdate#" -r -progress .
. Talvez você possa transformar seu comentário em uma resposta.Respostas:
Você pode querer experimentar
jhead
em vez que faz isso out-of-the-box (coma
,b
...z
sufixos permitindo que até 27 arquivos com a mesma data) e não tem o problema de estabilidade mencionado por @meuh:Ou usando
exiftool
(exemplo na página do manual):(aqui
%-c
sendo um sufixo numérico começando com-
)fonte
Minha versão de
exiv2
(0,25 001900) perguntará interativamente o que fazer quando o nome do arquivo já existir.Ao adicionar a opção,
-F
ele adicionará automaticamente um extra_1
(ou_2
etc) ao nome.Se o comando for executado uma segunda vez, ele diz:
e não faz nada, mas fica confuso se houver a
_1
peça e a renomeia_2
. Alternará assim de maneira não destrutiva a cada execução. Você pode ignorar isso, se quiser, ou alterar seufind
padrão para ignorar arquivos que correspondem ao padrão de data com uma_
parte.Por exemplo, o padrão regex para o formato da data começa
[0-9]{4}_[0-9]{2}_...
. Para simplificar, procurarei apenas uma mistura de 20 caracteres do conjunto0..9
e_
, que é regex[0-9_]{20}
. Para isso, o sufixo de_
seguido por pelo menos 1 dígito para procurar é_[0-9]{1,}.jpg
. Como o regex precisa corresponder ao caminho inteiro, e não apenas o nome da base, o regex final, incluindo o diretório, é.*/[0-9_]{20}_[0-9]{1,}.jpg
.Então você pode usar um achado como:
fonte
Exiv2 pode lidar com isso por conta própria. Também passei muito tempo procurando ajuda nisso, até ver o manual exiv2. A opção -F resolve esse problema.
Anexará um _N no final, se o arquivo já existir.
E para aqueles que procuram uma opção que permita criar pasta.
fonte
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