Renomeando arquivos por sua data de modificação -- image-processing campo com batch-rename camp askubuntu Relacionado O problema

Renaming files by their modification date


2
vote

problema

português

Eu tenho algumas imagens (96), que preciso renomear. Cada programa ou script que usei é automaticamente classificando arquivos pelo nome antigo, mas eles precisam ser numerados no pedido de data de modificação.

Por exemplo, uma imagem foi tirada em 11 v 2015 08:13:40 e é nomeado f67546288.jpg , e um segundo foi tirado em 11 v 2015 08:13:46, e é Nomeado f67553376.jpg .

Eu não quero as imagens encomendadas alfabeticamente, mas no momento em que foram tiradas.

english

I've got some (96) images, that I need to rename. Every program or script I've used is automatically sorting files by their old name, but they need to be numbered in modification date order.

For example, an image has been taken on 11 V 2015 08:13:40 and is named f67546288.jpg, and a second has been taken on 11 V 2015 08:13:46, and is named f67553376.jpg.

I don't want the images ordered alphabetically, but by the time they were taken.

     
     
     

Lista de respostas

3
 
vote
    .
  1. instalar exifrolho

  2. Use-o para renomear arquivos de acordo com as informações do EXIF ​​na imagem. Exemplo:

      for f in "$@" do     exiftool -ext jpg -d %Y%m%d_%H%M%S%%+c.%%le "-filename<CreateDate" "$f" done    

Ajuste o formato do nome do arquivo de saída para se adequar.

 
  1. Install exiftool

  2. Use it to rename files according to the exif information in the image. Example:

    for f in "$@" do     exiftool -ext jpg -d %Y%m%d_%H%M%S%%+c.%%le "-filename<CreateDate" "$f" done 

Adjust output file name format to suit.

 
 
       
       
2
 
vote

Você pode usar o carimbo de hora de modificação em segundos desde a época

tempo Unix (também conhecido como tempo de Posix ou erroneamente como época tempo) é um sistema para descrever instantes no tempo

  find . -type f -iname "*.JPG" -print0 | while read -d $'' file; do mv "$file" "$(stat -c %Y "$file")".jpg; done    

exemplo

  % ls -og total 2796 -rw-r--r-- 1 2859518 Jan  2 11:26 IMG_20150102_112628_8902.JPG  % find . -type f -iname "*.JPG" -print0 | while read -d $'' file; do mv "$file" "$(stat -c %Y "$file")".jpg; done  % ls -og                                                             total 2796 -rw-r--r-- 1 2859518 Jan  2 11:26 1420194390.jpg  % date -d @1420194390 Fr 2. Jan 11:26:30 CET 2015    

explicação

  • -iname "*.JPG" corresponde a todos os jpgs caso insensível
  • -print0 e $'' Seus nomes de arquivos podem ter espaços e newlines

A partir man stat

  %Y     time of last data modification, seconds since Epoch    

Se suas imagens tiverem dados ExiF, você poderá seguir as etapas abaixo.

Instalar exiftool

  sudo apt-get install libimage-exiftool-perl    

e você pode usar o comando abaixo:

  cd <your_images_path> exiftool '-filename<ModifyDate' -d %y%m%d_%H%M%S%%-c.%%le -r -ext jpg .    

exemplo

  % ls -og total 2796 -rw-r--r-- 1 2859518 Jan  2 11:26 IMG_20150102_112628_8902.JPG  % find . -type f -iname "*.JPG" -print0 | while read -d $'' file; do mv "$file" "$(stat -c %Y "$file")".jpg; done  % ls -og                                                             total 2796 -rw-r--r-- 1 2859518 Jan  2 11:26 1420194390.jpg  % date -d @1420194390 Fr 2. Jan 11:26:30 CET 2015 0   

explicação

  • % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 IMG_20150102_112628_8902.JPG % find . -type f -iname "*.JPG" -print0 | while read -d $'' file; do mv "$file" "$(stat -c %Y "$file")".jpg; done % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 1420194390.jpg % date -d @1420194390 Fr 2. Jan 11:26:30 CET 2015 1 significa renomear o arquivo de imagem usando a data e a hora de modificação da imagem.

  • % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 IMG_20150102_112628_8902.JPG % find . -type f -iname "*.JPG" -print0 | while read -d $'' file; do mv "$file" "$(stat -c %Y "$file")".jpg; done % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 1420194390.jpg % date -d @1420194390 Fr 2. Jan 11:26:30 CET 2015 2 significa "definir formato para valores de data / hora".

  • % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 IMG_20150102_112628_8902.JPG % find . -type f -iname "*.JPG" -print0 | while read -d $'' file; do mv "$file" "$(stat -c %Y "$file")".jpg; done % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 1420194390.jpg % date -d @1420194390 Fr 2. Jan 11:26:30 CET 2015 3 , usado em conjunto com % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 IMG_20150102_112628_8902.JPG % find . -type f -iname "*.JPG" -print0 | while read -d $'' file; do mv "$file" "$(stat -c %Y "$file")".jpg; done % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 1420194390.jpg % date -d @1420194390 Fr 2. Jan 11:26:30 CET 2015 4 Especifica o formato a ser usado para a data e hora ao renomear o arquivo. Quebrando o formato para baixo: - ABCDEFGHIJKLMNABCDefGHIJKLMN15 significa que a primeira parte do novo nome do arquivo deve ser composta pelos dois últimos dígitos do ano de criação, seguido pelo mês e dia, ambos representados por dois dígitos. O sublinhado _ significa colocar em um sublinhado após a parte da data do nome do arquivo.

  • % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 IMG_20150102_112628_8902.JPG % find . -type f -iname "*.JPG" -print0 | while read -d $'' file; do mv "$file" "$(stat -c %Y "$file")".jpg; done % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 1420194390.jpg % date -d @1420194390 Fr 2. Jan 11:26:30 CET 2015 6 significa adicionar a hora, minuto e segundo do tempo de criação, todos representados por dois dígitos.
  • % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 IMG_20150102_112628_8902.JPG % find . -type f -iname "*.JPG" -print0 | while read -d $'' file; do mv "$file" "$(stat -c %Y "$file")".jpg; done % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 1420194390.jpg % date -d @1420194390 Fr 2. Jan 11:26:30 CET 2015 7 significa que, se duas imagens tiverem o mesmo nome de arquivo até certo ponto no processo de nomeação, adicione "um número de cópia que é automaticamente incrementado" para dar a cada imagem um nome exclusivo. Observe o dobro %% "necessário por causa de algo chamado" escapando "que eu não entendo completamente. O % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 IMG_20150102_112628_8902.JPG % find . -type f -iname "*.JPG" -print0 | while read -d $'' file; do mv "$file" "$(stat -c %Y "$file")".jpg; done % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 1420194390.jpg % date -d @1420194390 Fr 2. Jan 11:26:30 CET 2015 8 antes que o "C" não seja realmente necessário, mas coloca um traço antes do número da cópia.
  • % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 IMG_20150102_112628_8902.JPG % find . -type f -iname "*.JPG" -print0 | while read -d $'' file; do mv "$file" "$(stat -c %Y "$file")".jpg; done % ls -og total 2796 -rw-r--r-- 1 2859518 Jan 2 11:26 1420194390.jpg % date -d @1420194390 Fr 2. Jan 11:26:30 CET 2015 9 significa manter a extensão do nome do arquivo original, mas torná-lo minúsculo se foi originalmente maiúsculo, uma boa opção quando as câmeras insistirem em usar abcdefghijklmn20 de -iname "*.JPG"1 . (Se você preferir extensões em maiúsculas, então use. %% ue. Se você preferir manter a caixa original intacta, use. %% E.)
  • -iname "*.JPG"2 significa apenas renomear arquivos com o -iname "*.JPG"3 extensão. Para renomear todos os arquivos de imagem na pasta de origem, não especifique quaisquer extensões. -iname "*.JPG"4 significa "executar este comando recursivamente para cada arquivo de imagem na pasta" Source "superior (ou seja, a pasta onde todos os arquivos a serem renomeados estão localizados) e também para os arquivos de imagem em todos os arquivos. as subpastas da pasta de origem, subpastas e assim por diante ".

fonte

 

You can use the modification time stamp in seconds since Epoch

Unix time (also known as POSIX time or erroneously as Epoch time) is a system for describing instants in time

find . -type f -iname "*.JPG" -print0 | while read -d $'\0' file; do mv "$file" "$(stat -c %Y "$file")".jpg; done 

Example

% ls -og total 2796 -rw-r--r-- 1 2859518 Jan  2 11:26 IMG_20150102_112628_8902.JPG  % find . -type f -iname "*.JPG" -print0 | while read -d $'\0' file; do mv "$file" "$(stat -c %Y "$file")".jpg; done  % ls -og                                                             total 2796 -rw-r--r-- 1 2859518 Jan  2 11:26 1420194390.jpg  % date -d @1420194390 Fr 2. Jan 11:26:30 CET 2015 

Explanation

  • -iname "*.JPG" matches all JPGs case insensitive
  • -print0 and $'\0' your filenames can have spaces and newlines

from man stat

%Y     time of last data modification, seconds since Epoch 

If your images have exif data, than you can follow the steps below.

Install exiftool

sudo apt-get install libimage-exiftool-perl 

and you can use the command below:

cd <your_images_path> exiftool '-filename<ModifyDate' -d %y%m%d_%H%M%S%%-c.%%le -r -ext jpg . 

Example

% ls -og total 2808 -rw-r--r-- 1 2859518 Jan  2 11:26 IMG_20150102_112628_8902.JPG drwxrwxr-x 3    4096 Jun 14 12:12 source drwxrwxr-x 2    4096 Jun 14 12:12 target  % exiftool '-filename<ModifyDate' -d %y%m%d_%H%M%S%%-c.%%le -r -ext jpg .     3 directories scanned     1 image files updated % ls -og                   total 2808 -rw-r--r-- 1 2859518 Jan  2 11:26 150102_112628.jpg drwxrwxr-x 3    4096 Jun 14 12:12 source drwxrwxr-x 2    4096 Jun 14 12:12 target 

Explanation

  • -filename<ModifyDate means rename the image file using the image's modify date and time.

  • -d means "Set format for date/time values".

  • %y%m%d_%H%M%S%%-c.%%le, used in conjunction with -d specifies the format to use for the date and time when renaming the file. Breaking the format down: -%y%m%d_ means the first part of the new file name should be composed of the last two digits of the creation-date year, followed by the month and day, both represented by two digits. The underscore _ means put in an underscore after the date part of the file name.

  • %H%M%S means add the hour, minute, and second of the creation time, all represented by two digits.
  • %%-c means that if two images have the same file name up to this point in the naming process, add "a copy number which is automatically incremented" to give each image a unique name. Note the doubled %% xe2x80x94 necessary because of something called "escaping" that I don't fully understand. The - before the "c" isn't really necessary, but it puts a dash before the copy number.
  • .%%le means keep the original file name extension, but make it lower-case if it was originally upper-case, a nice option when cameras insist on using JPG instead of jpg. (If you prefer upper-case extensions, then use .%%ue. If you prefer to keep the original case intact, use .%%e.)
  • -ext jpg means only rename files with the jpg extension. To rename all image files in the source folder, don't specify any extensions. -r means "execute this command recursively for every image file in the top "source" folder (that is, the folder where all the files to be renamed are located), and also for the image files in all the source folder's subfolders, sub-subfolders, and so on".

Source

 
 
1
 
vote

A maneira clássica de renomear arquivos é usar -iname "*.JPG"5 e abcdefghijklmn26 loop. ABCDEFGHIJKLMNABCDEFGHIJKLMN27 Dá tempo para a última modificação, o que é igual à criação do arquivo. Stat tem data de nascimento do arquivo (% w), mas principalmente falha, então% y é preferido

-iname "*.JPG"8

solução simples, nenhuma instalação de software necessária e faz o trabalho

 

The classic way to rename files is to use mv and for loop. stat -c %y filename gives us time of last modification, which is the same as of file's creation. Stat has file birth date (%w), but it mostly fails, so %y is prefered

for file in *.png; do mv "$file" "$(stat -c %y "$file")".png; done

Simple solution, no software installation necessary, and does the job

 
 
0
 
vote

Extraindo o tempo de modificação do Exif

  $ find -name '[0-9][0-9]*' -type f -exec jhead -ft -n%Y%m%d_%H%M%S_%f {} + ./DCIM/103OLYMP/P5074367.JPG ./DCIM/103OLYMP/P5074367.JPG --> ./DCIM/103OLYMP/20160507_103229_P5074367.jpg Not JPEG: ./DCIM/103OLYMP/P5074374.ORF ./DCIM/103OLYMP/P5074374.JPG ./DCIM/103OLYMP/P5074374.JPG --> ./DCIM/103OLYMP/20160507_131746_P5074374.jpg Not JPEG: ./DCIM/103OLYMP/P5074376.ORF Not JPEG: ./DCIM/BACKUP.HST    

Você também pode filtrar em extensões JPEG / JPG:

  find -name '[0-9][0-9]*' -o -iname '*.jp*g' -type f -exec jhead -ft -n%Y%m%d_%H%M%S_%f {} +    

Explicações:

  • -name '[0-9][0-9]*' para evitar renomear arquivos que já tendo um prefixo de data ('[0-9] para levar em conta anos e meses)
  • -iname '*.jp*g' para aplicar renomear apenas em arquivos de extensão JPG / JPEG (pode ser ignorado porque o JPEAD só processa arquivos suportados)
  • %f para manter o nome original do arquivo
 

Extracting modification time from EXIF

$ find -name '[0-9][0-9]*' -type f -exec jhead -ft -n%Y%m%d_%H%M%S_%f {} + ./DCIM/103OLYMP/P5074367.JPG ./DCIM/103OLYMP/P5074367.JPG --> ./DCIM/103OLYMP/20160507_103229_P5074367.jpg Not JPEG: ./DCIM/103OLYMP/P5074374.ORF ./DCIM/103OLYMP/P5074374.JPG ./DCIM/103OLYMP/P5074374.JPG --> ./DCIM/103OLYMP/20160507_131746_P5074374.jpg Not JPEG: ./DCIM/103OLYMP/P5074376.ORF Not JPEG: ./DCIM/BACKUP.HST 

You can also filter on JPEG/JPG extensions:

find -name '[0-9][0-9]*' -o -iname '*.jp*g' -type f -exec jhead -ft -n%Y%m%d_%H%M%S_%f {} + 

Explanations:

  • -name '[0-9][0-9]*' to prevent renaming files already having a date prefix ('[0-9][0-9] to take into account years and months)
  • -iname '*.jp*g' to apply renaming only on JPG/JPEG extension files (can be skipped because jhead only processes supported files)
  • %f to keep original filename
 
 

Perguntas relacionadas

5  Remova os últimos n caracteres de nomes de arquivos para todos os arquivos em um diretório  ( Remove last n characters of filenames for all files in a directory ) 
Como posso remover os últimos 12 caracteres de todos os nomes de arquivos de todos os arquivos em um determinado diretório por meio do terminal? ...

7  Como aumentar a graname arquivos numericamente, em ordem de data de modificação?  ( How to bulk rename files numerically in order of modification date ) 
Eu tenho algumas fotos com nomes bastante aleatórios, mas as datas (não exif, mas quando foram editadas pela última vez) estão corretas. Eu gostaria de renome...

17  Renomear retorna "Beword não permitido" ao tentar minimizar as partes de vários nomes de arquivos  ( Rename returns bareword not allowed when trying to lowercase parts of multiple ) 
Eu tenho dois arquivos em uma pasta no meu Ubuntu 16.04: a1.dat b1.DAT Eu quero renomear b1.DAT para b1.dat então eu teria seguindo arquivos como r...

44  Como posso renomear muitos arquivos de uma só vez?  ( How can i rename many files at once ) 
Eu preciso renomear um monte de arquivos para corrigir sua ordem de classificação, portanto, preciso ser capaz de fazer uma espécie de "encontrar e substituir...

-1  Problema complicado do arquivo de renomeamento em lote  ( Complicated batch rename file problem ) 
Eu encontrei o Pirrenamer do programa, mas não pareço entender isso. Eu tenho centenas de arquivos com nome como main.php?g2_view=core.DownloadItem&g2_it...

5  Renomear vários arquivos .txt Alterando alguns caracteres em posições específicas  ( Rename multiple txt files changing some characters in specific positions ) 
Eu tenho uma coleção de centenas de arquivos .txt na mesma pasta no Ubuntu 16.04, e eles são nomeados com strings e números de índice, assim: a01_s01_e01...

2  Como posso alterar automaticamente espaços para sublinhados na caixa de diálogo Salvar arquivo?  ( How can i automatically change spaces to underscores in the file save dialog box ) 
Eu estou freqüentemente salvando documentos do meu Windows - usando colegas de trabalho, e os nomes de arquivos geralmente contêm espaços. Por exemplo, esto...

4  Arquivos a granel / renomeamento em lote com finais diferentes (não alteram as finais)  ( Bulk batch rename files with different endings not change the endings ) 
Meu problema, que tenho uma pasta com muitos arquivos diferentes como: xxxxxxxxx.avi yyyyyyy.jpg zzz.txt e eu quero renomeá-los em 001...

10  Renomear arquivos com um comando de uma linha  ( Rename files with one line command ) 
Eu tenho esse diretório e quero renomear os arquivos: ===> ls -1 Der-vierte-Weise/ 10 - 10 - Erkenntniss.ogg 1 - 01 - Hoffnung.ogg 11 - 11 - Wahrheit.ogg 1...

11  Como posso instalar o Pyrenamer para biônico?  ( How can i install pyrenamer for bionic ) 
Pyrenamer é uma excelente ferramenta de renomeação de arquivos em massa. Mas eu não consegui encontrá-lo no repositório para 18,04 Bônus biônico ou um PPA. E...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.