У меня есть приблизительно (96) изображения, которые я должен переименовать. Каждая программа или сценарий, который я использовал, автоматически сортируют файлы по их старому названию, но они должны быть пронумерованы в хронологическом порядке модификации. Пример: изображения были взяты на 11 В 2015 8:13:40 и 11 В 2015 8:13:46, но 1-е имена "f67546288.jpg" и 2-й "f67553376.jpg". Им не должен заказывать алфавит, но ко времени, когда фотография была сделана.
P.S. Извините за мой английский язык, но я поляк
Классический способ переименовать файлы состоит в том, чтобы использовать mv
и for
цикл. stat -c %y filename
дает нам время последнего изменения, которое совпадает с создания файла. Статистика имеет дату рождения файла (%w), но это главным образом перестало работать, таким образом, %y предпочтен
for file in *.png; do mv "$file" "$(stat -c %y "$file")".png; done
Простое решение, никакая необходимая установка программного обеспечения, и делает задание
Установка Использование exiftool
это для переименования файлов согласно exif информации в изображении. Пример:
for f in "$@"
do
exiftool -ext jpg -d %Y%m%d_%H%M%S%%+c.%%le "-filename<CreateDate" "$f"
done
Корректируют формат имени выходного файла для удовлетворения.
Извлечение времени изменения от 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
для хранения исходного имени файла Время 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
Установка 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
означает, "выполняют эту команду рекурсивно для каждого файла изображения в главной "исходной" папке (то есть, папка, где все файлы, которые будут переименованы, расположены), и также для файлов изображений во всех исходных подпапках папки, подподпапках, и так далее".