Переименование файлов их датой модификации

У меня есть приблизительно (96) изображения, которые я должен переименовать. Каждая программа или сценарий, который я использовал, автоматически сортируют файлы по их старому названию, но они должны быть пронумерованы в хронологическом порядке модификации. Пример: изображения были взяты на 11 В 2015 8:13:40 и 11 В 2015 8:13:46, но 1-е имена "f67546288.jpg" и 2-й "f67553376.jpg". Им не должен заказывать алфавит, но ко времени, когда фотография была сделана.

P.S. Извините за мой английский язык, но я поляк

2
задан 13 June 2015 в 23:36

4 ответа

Классический способ переименовать файлы состоит в том, чтобы использовать mv и for цикл. stat -c %y filename дает нам время последнего изменения, которое совпадает с создания файла. Статистика имеет дату рождения файла (%w), но это главным образом перестало работать, таким образом, %y предпочтен

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

Простое решение, никакая необходимая установка программного обеспечения, и делает задание

1
ответ дан 2 December 2019 в 01:45
  1. Установка Использование exiftool

  2. это для переименования файлов согласно exif информации в изображении. Пример:

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

Корректируют формат имени выходного файла для удовлетворения.

3
ответ дан 2 December 2019 в 01:45

Извлечение времени изменения от 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

можно также отфильтровать на расширениях 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 {} +

Объяснения:

  • -name '[0-9][0-9]*' для предотвращения файлов переименования, уже имеющих префикс даты (' [0-9] [0-9] для принятия во внимание лет и месяцев)
  • -iname '*.jp*g' для применения переименования только на дополнительные файлы JPG/JPEG (может быть пропущен, потому что jhead только обрабатывает поддерживаемые файлы)
  • %f для хранения исходного имени файла
0
ответ дан 2 December 2019 в 01:45

Можно использовать штамп времени изменения в секундах с Эпохи

Время Unix (также известный как время POSIX или ошибочно как время Эпохи) является системой для описания моментов вовремя

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 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

Объяснение

  • -iname "*.JPG" соответствия все JPGs нечувствительный к регистру
  • -print0 и $'\0' Ваши имена файлов могут иметь пробелы и новые строки

от man stat

%Y     time of last data modification, seconds since Epoch

Если Ваши изображения имеют exif данные, чем можно выполнить шаги ниже.

Установка exiftool

sudo apt-get install libimage-exiftool-perl

и можно использовать команду ниже:

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

Пример

% 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

Объяснение

  • -filename<ModifyDate средства переименовывают файл изображения с помощью изображения, изменяют дату и время.

  • -d означает "Формат набора для даты/временных стоимостей".

  • %y%m%d_%H%M%S%%-c.%%le, используемый в сочетании с -d указывает формат для использования для даты и времени при переименовании файла. Разрушение формата: -%y%m%d_ означает, что первая часть нового имени файла должна состоять из последних двух цифр года даты создания, сопровождаемого месяцем и днем, оба представленные двумя цифрами. Подчеркивание _ средства вставило подчеркивание после части даты имени файла.

  • %H%M%S средства добавляют час, минуту, и второй из времени создания, все представленные двумя цифрами.
  • %%-c средства, что, если два изображения имеют то же имя файла до этой точки в процессе именования, добавьте "число копии, которое автоматически увеличено", чтобы дать каждому изображению уникальное имя. Отметьте удвоенный %% — необходимый из-за чего-то позвонившего "выход" из этого, я не полностью понимаю. - прежде чем "c" не действительно необходим, но он помещает тире перед числом копии.
  • .%%le средства сохраняют исходное расширение файла, но делают его нижним регистром, если это было первоначально прописным, хорошая опция, когда камеры настаивают на том, чтобы использовать JPG вместо jpg. (Если Вы предпочитаете прописные расширения, затем используйте. %% ue. Если Вы предпочитаете сохранять исходный случай в целости, использовать. %% e.)
  • -ext jpg средства только переименовывают файлы с jpg расширение. Для переименования всех файлов изображений в исходной папке не указывайте расширения. -r означает, "выполняют эту команду рекурсивно для каждого файла изображения в главной "исходной" папке (то есть, папка, где все файлы, которые будут переименованы, расположены), и также для файлов изображений во всех исходных подпапках папки, подподпапках, и так далее".

Источник

2
ответ дан 2 December 2019 в 01:45

Другие вопросы по тегам:

Похожие вопросы: