Найти тему
Пикабу

Скрипт для массового выборочного конвертирования форматов файлов в Ubuntu, например, heic в jpg

UPD Я улудшил Скрипт для массового выборочного конвертирования форматов файлов в Ubuntu, например, heic в jpg, вторая серия.

В общем, у меня айфон и убунта. Не самое удобное сочетание, но, если ты однажды перешел на Линукс, значит - у тебя уже изначально предрасположенность к танцам с бубном вокруг компьютера. С помощью Warpinator'а перекидывание файлами с ноутбука на телефон и обратно наладилось, а после того, как в пыльном углу образовался nas-сервер из старого ноутбука - процесс стал непринужденным. Однако, выяснился ньюанс - фотки на гейфоне пишутся почему-то в странненьком формате.heic, а весь остальной мир предпочитает жпг. Причем, он выяснился, когда мне надо было заслать в налоговую два-три десятка фотогорафий документов. И онлайн-конвертеры почему-то адекватно при этом не работали. В общем. ВЫЗОВ ПРИНЯТ. За неадекватное для поставленной задачи время (чет типа полдня) было порождено решение в виде баш-скрипта:

#! /bin/bash.

IFS=$'\n'.

read -r -d '' -a array < < (xclip -selection clipboard -out && printf '\0')

for element in "${array[@] }".

do.

strlen=${#element} #Дляна имени файла с расширением.

pathlen=`expr $strlen - 4` #Длина имени без последних 4 символов heic.

path=`expr substr $element 1 $pathlen` #Имя файла без расширения (первые "все - 4" символы)

jpg=$path"jpg" #Прилепить новое расширение.

heif-convert "$element" "$jpg" #Тут можно вкорячить любой конвертер.

done.

Соответственно, для работы баш-скрипта нужны пакеты xclip и libheif-examples. Теперь - что вообще происходит: xclip - консольная утилита для работы с буфером обмена. heif-convert - команда из пакета libheif-examples, которая конветртирует файл из имя.хейф в имя.жпг. После того, как все пакеты установлены и вся лабуда скопипащена в файл скрипта с расширением.sh, который помечен, как исполнимый, делается следующее: в тунаре (кстати, не знаю, будет ли работать в наутилусе) выделяются подопытные файлы, копируются в буфер обмена. Далее, хоткеем или консолью запускается скрипт. Далее, оно делает копии скопированных в буфер файлов в новом формате с теми же именами в той же папке. Подробно: после копирования из тунара файлов в буфере оказывается кучка строк типа такого:

/home/username/123/IMG_0144.HEIC.

/home/username/123/IMG_0145.HEIC.

/home/username/123/IMG_0146.HEIC.

Первые 2 строки после бин-баш - чтение содержимого буфера обена в массив переменных, где каждая переменная - полное имя файла. Затем - перебор элементов массива (полных имен файлов), замена расширения на конце и впихивание "исходного_имени_и_расширения" и "конечного_имени_и_расширения" в непосредственно команду конвертера. Больше всего гемора было с поиском рабочего решения по чтению буфера в массив. Из плюсов получившегося поделия - с учетом распространенности в линухе консольных конвертеров файлов с синтаксисом типа КОНВЕРТЕР "ИЗ_ЭТОГО" "В_ЭТО", этот скрипт непринужденно может быть перепилен под любой подобный конвертер. Удобно же. Вроде.

Пост автора Doctor.Dick.

Комментарии