123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #!/bin/bash
- E='echo -e';e='echo -en';trap "R;exit" 2
- ESC=$( $e "\e")
- TPUT(){ $e "\e[${1};${2}H" ;}
- CLEAR(){ $e "\ec";}
- CIVIS(){ $e "\e[?25l";}
- MARK(){ $e "\e[1;90m";}
- UNMARK(){ $e "\e[0m";}
- R(){ CLEAR ;stty sane;CLEAR;};
- HEAD(){ for (( a=2; a<=34; a++ ))
- do
- TPUT $a 1
- $E "\033[34m\xE2\x94\x82 \xE2\x94\x82\033[0m";
- done
- TPUT 2 3
- $E "\033[1;2mКопирование примеров \033[36m COPYING EXAMPLES\033[0m";
- TPUT 3 3
- $E "\033[2mЭти примеры демонстрируют возможность копировать значения тегов между файлами.\033[0m";
- TPUT 24 3
- $E "\033[1;2mПереименование примеров \033[36mRENAMING EXAMPLES\033[0m";
- TPUT 33 4
- $E "\033[32mUp \xE2\x86\x91 \xE2\x86\x93 Down Select Enter\033[0m";
- MARK;TPUT 1 1
- $E "\033[0m\033[34m+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+\033[0m" ;UNMARK;}
- i=0; CLEAR; CIVIS;NULL=/dev/null
- FOOT(){ MARK;TPUT 35 1
- $E "\033[0m\033[34m+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+\033[0m";UNMARK;}
- i=0; CLEAR; CIVIS;NULL=/dev/null
- ARROW(){ IFS= read -s -n1 key 2>/dev/null >&2
- if [[ $key = $ESC ]];then
- read -s -n1 key 2>/dev/null >&2;
- if [[ $key = \[ ]]; then
- read -s -n1 key 2>/dev/null >&2;
- if [[ $key = A ]]; then echo up;fi
- if [[ $key = B ]];then echo dn;fi
- fi
- fi
- if [[ "$key" == "$($e \\x0A)" ]];then echo enter;fi;}
- M0(){ TPUT 4 3; $e "Скопируйте значения всех доступных для записи тегов из «src.cr2» в «dst.jpg» \033[32m exiftool -tagsFromFile src.cr2 dst.jpg \033[0m";}
- M1(){ TPUT 5 3; $e "Скопируйте значения всех доступных для записи тегов из «src.jpg» в «dst.jpg» \033[32m exiftool -TagsFromFile src.jpg -all:all dst.jpg \033[0m";}
- M2(){ TPUT 6 3; $e "Удалите всю метаинформацию \033[33m exiftool -all= dst.jpg \033[0m";}
- M3(){ TPUT 7 3; $e "Восстановите всю метаинформацию EXIF с нуля в образе \033[32m exiftool -exif:all= -tagsfromfile @ -all:all -unsafe bad.jpg \033[0m";}
- M4(){ TPUT 8 3; $e "Скопируйте метаинформацию из «a.jpg» в файл данных XMP \033[32m exiftool -Tagsfromfile a.jpg out.xmp \033[0m";}
- M5(){ TPUT 9 3; $e "Скопируйте всю метаинформацию из «a.jpg» в «b.jpg», удалив всю информацию XMP и эскиз \033[32m exiftool -tagsFromFile a.jpg -XMP:All= -ThumbnailImage= -m b.jpg \033[0m";}
- M6(){ TPUT 10 3; $e "Скопируйте заголовок с одного изображения на другое и установите новое имя автора \033[32m exiftool -TagsFromFile src.jpg -title -author=Phil dst.jpg \033[0m";}
- M7(){ TPUT 11 3; $e "Скопируйте ISO из одного изображения и комментарий из другого изображения в целевой образ\033[32m exiftool -TagsFromFile a.jpg -ISO -TagsFromFile b.jpg -comment dst.jpg\033[0m";}
- M8(){ TPUT 12 3; $e "Копируйте информацию EXIF из одного изображения в другое, за исключением тегов SubIFD \033[32m exiftool -tagsfromfile src.jpg -exif:all --subifd:all dst.jpg \033[0m";}
- M9(){ TPUT 13 3; $e "Используйте дату из метаинформации, чтобы установить дату изменения файловой системы \033[32m exiftool '-FileModifyDate<DateTimeOriginal' dir \033[0m";}
- M10(){ TPUT 14 3; $e "Скопируйте всю возможную информацию из «src.jpg» и запишите в формате XMP в «dst.jpg» \033[32m exiftool -TagsFromFile src.jpg '-xmp:all<all' dst.jpg \033[0m";}
- M11(){ TPUT 15 3; $e "Установите Описание изображения из имени файла после удаления расширения \033[32m exiftool '-Description<\${FileName;s/\.[^.]*\$//}' dir \033[0m";}
- M12(){ TPUT 16 3; $e "Преобразуйте информацию IPTC в XMP с соответствующими преобразованиями имен тегов \033[32m exiftool -@ iptc2xmp.args -iptc:all= a.jpg \033[0m";}
- M13(){ TPUT 17 3; $e "Рекурсивно перезаписать все изображения JPG в dir с информацией \033[32m exiftool -tagsfromfile %d%f.CR2 -r -ext JPG dir \033[0m";}
- M14(){ TPUT 18 3; $e "Добавить марку камеры в список ключевых слов \033[32m exiftool '-keywords+<make' image.jpg \033[0m";}
- M15(){ TPUT 19 3; $e "Установите тег комментария для всех изображений в «dir» из значений тегов EXIF: ISO \033[32m exiftool '-comment<ISO=\$exif:iso Exposure=\${shutterspeed}' dir \033[0m";}
- M16(){ TPUT 20 3; $e "Скопируйте ICC_Profile из одного образа в другой \033[32m exiftool -TagsFromFile src.jpg -icc_profile dst.jpg \033[0m";}
- M17(){ TPUT 21 3; $e "Скопируйте всю метаинформацию в исходной форме из изображения JPEG в файл MIE \033[32m exiftool -TagsFromFile src.jpg -all:all dst.mie \033[0m";}
- M18(){ TPUT 22 3; $e "Bыполняет ту же задачу, за исключением того, что параметр -o не будет записывать в файл \033[32m exiftool -o dst.mie -all:all src.jpg \033[0m";}
- M19(){ TPUT 23 3; $e "[Дополнительно] Извлеките JpgFromRaw или PreviewImage из всех файлов, кроме JPG, в DIR, сохранив их с именами файлов, например image_EXT.jpg ";}
- M20(){ TPUT 25 3; $e "Примечание \033[32m Note \033[0m";}
- M21(){ TPUT 26 3; $e "Переименуйте old.jpg в new.jpg в каталоге dir \033[32m exiftool -filename=new.jpg dir/old.jpg \033[0m";}
- M22(){ TPUT 27 3; $e "Переместите файлы из каталога «dir» в каталоги, названные исходными расширениями файлов \033[32m exiftool -directory=%e dir \033[0m";}
- M23(){ TPUT 28 3; $e "Переместите все файлы в «dir» в иерархию каталогов на основе года, месяца и дня \033[32m exiftool '-Directory<DateTimeOriginal' -d %Y/%m/%d dir \033[0m";}
- M24(){ TPUT 29 3; $e "Тот же эффект, что и выше, за исключением того, что файлы копируются, а не перемещаются \033[32m exiftool -o . '-Directory<DateTimeOriginal' -d %Y/%m/%d dir \033[0m";}
- M25(){ TPUT 30 3; $e "Переименуйте все файлы в «dir», добавив к имени файла название модели камеры \033[32m exiftool '-filename<%f_\${model;}.%e' dir \033[0m";}
- M26(){ TPUT 31 3; $e "Переименуйте все изображения в dir в соответствии с датой и временем CreateDate \033[32m exiftool '-FileName<CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e dir \033[0m";}
- M27(){ TPUT 32 3; $e "Задайте имена файлов изображений JPG в каталоге с помощью тегов CreateDate и FileNumber \033[32m exiftool '-FileName<\${CreateDate}_\$filenumber.jpg' -d %Y%m%d -ext jpg \033[0m";}
- M28(){ TPUT 34 3; $e "Выход \033[32m EXIT \033[0m";}
- LM=28
- MENU(){ for each in $(seq 0 $LM);do M${each};done;}
- POS(){ if [[ $cur == up ]];then ((i--));fi
- if [[ $cur == dn ]];then ((i++));fi
- if [[ $i -lt 0 ]];then i=$LM;fi
- if [[ $i -gt $LM ]];then i=0;fi;}
- REFRESH(){ after=$((i+1)); before=$((i-1))
- if [[ $before -lt 0 ]];then before=$LM;fi
- if [[ $after -gt $LM ]];then after=0;fi
- if [[ $j -lt $i ]];then UNMARK;M$before;else UNMARK;M$after;fi
- if [[ $after -eq 0 ]] || [ $before -eq $LM ];then
- UNMARK; M$before; M$after;fi;j=$i;UNMARK;M$before;M$after;}
- INIT(){ R;HEAD;FOOT;MENU;}
- SC(){ REFRESH;MARK;$S;$b;cur=`ARROW`;}
- ES(){ MARK;$e " ENTER = main menu ";$b;read;INIT;};INIT
- while [[ "$O" != " " ]]; do case $i in
- 0) S=M0;SC;if [[ $cur == enter ]];then R;echo " Скопируйте значения всех доступных для записи тегов из «src.cr2» в «dst.jpg», записав информацию в одноименные теги в предпочтительных группах.";ES;fi;;
- 1) S=M1;SC;if [[ $cur == enter ]];then R;echo " Скопируйте значения всех доступных для записи тегов из «src.jpg» в «dst.jpg», сохранив исходные группы тегов.";ES;fi;;
- 2) S=M2;SC;if [[ $cur == enter ]];then R;echo "
- Удалите всю метаинформацию с изображения «dst.jpg», затем скопируйте теги EXIF из «src.jpg»:
- exiftool -all= -tagsfromfile src.jpg -exif:all dst.jpg
- #
- Следующая команда удалит все дополнительные метаданные, связанные с файлом
- exiftool -all= imagen.jpg
- #
- Для удаления EXIF-данных из всех файлов изображений в директории:
- exiftool -all= *
- #
- Для удаления EXIF-данных только из изображений, удовлетворяющих маске (например, с расширением .jpg):
- exiftool -all= *.jpeg
- #
- Если нужно удалить метаданные рекурсивно из всех файлов в директории /home/user/photo/, не создавая бэкапы и с показам прогресса:
- exiftool -overwrite_original -progress -r -all= /home/user/photo/*
- ";ES;fi;;
- 3) S=M3;SC;if [[ $cur == enter ]];then R;echo " Восстановите всю метаинформацию EXIF с нуля в образе. Этот метод можно использовать в изображениях JPEG для восстановления поврежденной информации EXIF, которая в
- противном случае не мог быть записан из-за ошибок. Тег «Небезопасный» - это ярлык для небезопасных тегов EXIF в изображениях JPEG, которые обычно не копируются.
- Видеть документацию по именам тегов для получения дополнительных сведений о небезопасных тегах.";ES;fi;;
- 4) S=M4;SC;if [[ $cur == enter ]];then R;echo " Скопируйте метаинформацию из «a.jpg» в файл данных XMP. Если файл данных XMP «out.xmp» уже существует, он будет обновлен с новой информацией. В противном случае
- будет создан файл данных XMP. Таким образом можно создавать только файлы, содержащие только метаданные (файлы, содержащие изображения, можно редактировать, но не
- созданный). См. «ПРИМЕРЫ НАПИСАНИЯ» выше, чтобы узнать о другом способе создания файлов XMP.";ES;fi;;
- 5) S=M5;SC;if [[ $cur == enter ]];then R;echo " Скопируйте всю метаинформацию из «a.jpg» в «b.jpg», удалив всю информацию XMP и эскиз изображения из места назначения.";ES;fi;;
- 6) S=M6;SC;if [[ $cur == enter ]];then R;echo " Скопируйте заголовок с одного изображения на другое и установите новое имя автора.";ES;fi;;
- 7) S=M7;SC;if [[ $cur == enter ]];then R;echo " Скопируйте ISO из одного изображения и комментарий из другого изображения в целевой образ.";ES;fi;;
- 8) S=M8;SC;if [[ $cur == enter ]];then R;echo " Копируйте только информацию EXIF из одного изображения в другое, за исключением тегов SubIFD.";ES;fi;;
- 9) S=M9;SC;if [[ $cur == enter ]];then R;echo " Используйте исходную дату из метаинформации, чтобы установить дату изменения файловой системы одного и того же файла для всех изображений в каталоге. (Обратите
- внимание, что \"-TagsFromFile @\" предполагается, если при перенаправлении информации, как в этом примере, не указан другой -TagsFromFile.)";ES;fi;;
- 10) S=M10;SC;if [[ $cur == enter ]];then R;echo " Скопируйте всю возможную информацию из «src.jpg» и запишите в формате XMP в «dst.jpg».";ES;fi;;
- 11) S=M11;SC;if [[ $cur == enter ]];then R;echo " Установите Описание изображения из имени файла после удаления расширения. В этом примере используется «Расширенное форматирование» для выполнения операция
- подстановки для удаления последней точки и последующих символов из имени файла.";ES;fi;;
- 12) S=M12;SC;if [[ $cur == enter ]];then R;echo " Преобразуйте информацию IPTC в XMP с соответствующими преобразованиями имен тегов и удалите исходную информацию IPTC из изображения. В этом примере используется
- iptc2xmp.args - файл, включенный в дистрибутив ExifTool и содержащий необходимые аргументы для преобразования информации IPTC в формат XMP. Также в дистрибутив
- включены xmp2iptc.args (который выполняет обратное преобразование) и еще несколько файлов .args для других преобразований между EXIF, IPTC и XMP.";ES;fi;;
- 13) S=M13;SC;if [[ $cur == enter ]];then R;echo " Рекурсивно перезаписать все изображения \"JPG\" в \"dir\" с информацией, скопированной из соответствующих изображений \"CR2\" в тех же каталогах.";ES;fi;;
- 14) S=M14;SC;if [[ $cur == enter ]];then R;echo " Добавить марку камеры в список ключевых слов.";ES;fi;;
- 15) S=M15;SC;if [[ $cur == enter ]];then R;echo " Установите тег комментария для всех изображений в «dir» из значений тегов EXIF: ISO и ShutterSpeed. Результирующий комментарий будет в виде
- \"ISO=100 Exposure=1/60\"";ES;fi;;
- 16) S=M16;SC;if [[ $cur == enter ]];then R;echo " Скопируйте ICC_Profile из одного образа в другой.";ES;fi;;
- 17) S=M17;SC;if [[ $cur == enter ]];then R;echo " Скопируйте всю метаинформацию в исходной форме из изображения JPEG в файл MIE. Если файл MIE не существует, он будет создан. Эта техника может использоваться для
- хранения метаданных изображения, чтобы его можно было вставить обратно в изображение (с помощью обратной команды) позже в рабочем процессе.";ES;fi;;
- 18) S=M18;SC;if [[ $cur == enter ]];then R;echo " Эта команда выполняет ту же задачу, что и команда выше, за исключением того, что параметр -o не будет записывать в выходной файл, который уже существует.";ES;fi;;
- 19) S=M19;SC;if [[ $cur == enter ]];then R;echo "
- exiftool -b -jpgfromraw -w %d%f_%ue.jpg -execute -b -previewimage -w %d%f_%ue.jpg -execute -tagsfromfile @ -srcfile %d%f_%ue.jpg -overwrite_original -common_args --ext jpg DIR
- [Дополнительно] Извлеките JpgFromRaw или PreviewImage из всех файлов, кроме JPG, в DIR, сохранив их с именами файлов, например image_EXT.jpg, затем добавьте все
- мета информация из исходных файлов в извлеченные изображения. Здесь командная строка разбита на три раздела (разделенных параметрами -execute), и каждый выполняется,
- как если бы это была отдельная команда. Параметр -common_args заставляет аргументы --ext jpg DIR применяться ко всем трем команд, а опция -srcfile позволяет
- извлеченному изображению JPG быть исходным файлом для третьей команды (тогда как файлы RAW являются исходным файлы для двух других команд).
- ";ES;fi;;
- 20) S=M20;SC;if [[ $cur == enter ]];then R;echo " Путем записи тегов «FileName» и «Directory» файлы переименовываются и / или перемещаются в новые каталоги. Это может быть особенно полезно и эффективно для
- организация файлов по дате в сочетании с параметром -d. Новые каталоги создаются по мере необходимости, но существующие файлы не будут перезаписаны. В коды
- формата % d,% f и% e могут использоваться в новом имени файла для представления каталога, имени и расширения исходного файла, а% c может использоваться для добавления
- номер копии, если файл уже существует (подробности см. в параметре -w). Обратите внимание, что если используется в строке формата даты, к передать эти коды через
- синтаксический анализатор даты / времени. (И далее обратите внимание, что в пакетном файле Windows все символы '%' также должны быть экранированы, поэтому в этом
- крайнем случае case '%%%% f' необходим для передачи простого '% f' через два уровня синтаксического анализа.)
- Дополнительную документацию и примеры см. в https://exiftool.org/filename.html";ES;fi;;
- 21) S=M21;SC;if [[ $cur == enter ]];then R;echo " Переименуйте \"old.jpg\" в \"new.jpg\" в каталоге \"dir\".";ES;fi;;
- 22) S=M22;SC;if [[ $cur == enter ]];then R;echo " Переместите все файлы из каталога «dir» в каталоги, названные исходными расширениями файлов.";ES;fi;;
- 23) S=M23;SC;if [[ $cur == enter ]];then R;echo " Переместите все файлы в «dir» в иерархию каталогов на основе года, месяца и дня «DateTimeOriginal». например) Эта команда переместит файл «dir / image.jpg»
- с «DateTimeOriginal» от «2005: 10: 12 16:05:56» до «2005/10/12 / image.jpg».";ES;fi;;
- 24) S=M24;SC;if [[ $cur == enter ]];then R;echo " Тот же эффект, что и выше, за исключением того, что файлы копируются, а не перемещаются.";ES;fi;;
- 25) S=M25;SC;if [[ $cur == enter ]];then R;echo " Переименуйте все файлы в «dir», добавив к имени файла название модели камеры. Точка с запятой после имени тега внутри фигурных скобок приводит к появлению символов
- которые недопустимы в именах файлов Windows, которые необходимо удалить из значения тега (см. «Расширенное форматирование» для объяснения).";ES;fi;;
- 26) S=M26;SC;if [[ $cur == enter ]];then R;echo " Переименуйте все изображения в dir в соответствии с датой и временем CreateDate, добавив номер копии с ведущим '-', если файл уже существует (\"% -c\"),
- и с сохранением исходного расширения файла (% e). Обратите внимание на дополнительный символ «%», необходимый для экранирования кодов файлов (% c и% e) в строке
- формата даты.";ES;fi;;
- 27) S=M27;SC;if [[ $cur == enter ]];then R;echo " Задайте имена файлов всех изображений JPG в текущем каталоге с помощью тегов CreateDate и FileNumber в виде «20060507_118-1861.jpg».";ES;fi;;
- 28) S=M28;SC;if [[ $cur == enter ]];then R;clear;exit 0;fi;;
- esac;POS;done
|