Показаны сообщения с ярлыком пакетная обработка. Показать все сообщения
Показаны сообщения с ярлыком пакетная обработка. Показать все сообщения

понедельник, 27 ноября 2023 г.

Перекодировать flac в mp3

На днях возникла необходимость перекодировать большое число файлов flac в формат mp3. Как всегда, в извечном споре "сделать самому или найти того кто сделает" победила природная лень 😁. Потому что сразу были предприняты поиски в Интернет насчёт необходимых команд в терминале. А поскольку было желание организовать всё так как описано в этой публикации, то возникло стремление получить аналогичное решение вопроса.  

Создаётся сценарий sh и кнопка запуска, указывающая на созданный сценарий. 

Сценарий (скрипт sh)

#!/bin/bash
dir=$(zenity --file-selection --directory)
find "$dir" -name "*.flac" -exec ffmpeg -i {} -acodec libmp3lame -ab 320k {}.mp3 \;
find "$dir" -name "*.flac" -exec rm {} \;
find "$dir" -name '*.flac.mp3' -exec sh -c 'mv "$0" "${0%.flac.mp3}.mp3"' {} \;

Что он делает:
1. Запрашивает папку расположения файлов flac.
2. В указанной папке рекурсивно перекодирует файлы flac в файлы формата mp3 с указанным битрейтом. В данном примере битрейт указан как 320k. Укажите желаемую вами степень сжатия (например, 196k).
3. Удаляются все исходные файлы с раcширением flac
4. Поскольку перекодированные в формат mp3 файлы имеют расширение flac.mp3, то осуществляется переименование их расширения в mp3

Кнопка запуска представляет собой файл вида .desktop (пример создания здесь). 

Пример содержания файла .desktop кнопки запуска:
[Desktop Entry]
Version=1.0
Type=Application
Name=flac-mp3
Comment=
Exec=/home/minter/Tools/scripts/modules/flac-mp3.sh
Icon=audio-x-flac
Path=
Terminal=true
StartupNotify=false

После создания кнопки запуска переместите её с рабочего стола в папку своего профиля ~/.local/share/applications  После этого созданная кнопка запуска будет отображаться в главном меню в разделе "Прочее", "Разное" или ей подобной (зависит от дистрибутива). Если есть необходимость её отображения в разделе "Мультимедиа", то откройте созданную вами кнопку в текстовом редакторе, например,

xed /home/ваш_профиль/.local/share/applications/ваша_кнопка.desktop

в впишите в него строку  Categories=AudioVideo;Audio;

После запуска весь процесс отображается в окне терминала, которое после завершения всех задач будет автоматически закрыто.

понедельник, 19 июня 2023 г.

Полное удаление Libre Office из Linux Mint


Полное удаление Libre Office может потребоваться в случаях замены данного офисного пакета на какой-либо другой пакет офисных программ: Free Office, Only Office, My Office.

Приводимая на различных сайтах команда удаления LibreOffice, например,

sudo apt purge -y libreoffice*

не приводит к полному удалению из системы компонентов данного ПО. Как результат, приходится заходить в менеджер пакетов Synaptic, осуществлять поиск и вручную удалять пакеты, найденные по запросу libreoffice.

Приводимую на других сайтах команду необходимо дополнить такой командой:

sudo apt purge -y ure* uno-libs-private mythes* libuno* liblibreoffice-java hyphen* hunspell*

В процессе удаления остаточных компонентов LibreOffice будет освобождено 177 МБ дискового пространства. При удалении будут также удалены пакеты libuno-purpenvhelpergcc3-3 и libuno-cppuhelpergcc3-3. В пояснении назначения данных пакетов (Synaptic) указано, что это: 

Окружение времени исполнения UNO (URE) — широко известная компонентная модель UNO для LibreOffice, собранная в виде отдельного пакета. Окружение предлагает гибкую легковесную компонентную модель, которая наиболее идеальна для (но не ограничиваясь этим) сочетания в одном приложении компонентов, написанных на разных языках программирования, а также разработанных разными командами. Вы можете использовать окружение URE для создания любого вида ПО с любой областью применения.

Поэтому полной командой удаления LibreOffice будет такая:

sudo apt purge -y libreoffice* ure* uno-libs-private mythes* libuno* liblibreoffice-java hyphen* hunspell*

Остаётся открытым вопрос со шрифтом opens___.ttf (/usr/share/fonts/truetype/libreoffice) и папкой /etc/libreoffice. Решение об их удалении принимайте самостоятельно. Если не нужно, то удаляйте.

Для шрифта с его папкой:

sudo apt purge -y fonts-opensymbol && sudo rm -rf /usr/share/fonts/truetype/libreoffice

Для папки /etc/libreoffice:

sudo rm -rf /etc/libreoffice

пятница, 12 мая 2023 г.

Пакетное переименование расширения файлов JPG в jpg

При использовании 4K Slideshow Maker на Linux Mint было обнаружено, что при добавлении в слайшоу файлов изображений с расширением JPG в списке добавленных программа этих файлов не видит и, соответственно, не обрабатывает. Такое расширение файлов JPG необходимо переименовывать в jpg.

Для своих нужд написан маленький сценарий, при запуске которого выбирается каталог (папка), в котором необходимо произвести замену расширений JPG на jpg.

#!/bin/bash
dir=$(zenity --file-selection --directory)
find "$dir" -name '*.JPG' -exec sh -c 'mv "$0" "${0%.JPG}.jpg"' {} \;
exit

Сценарий можно оформить как кнопку запуска приложений. Кнопка запуска приложений представляет из себя обычный текстовый файл с расширением .desktop. который размещается в скрытом каталоге домашнего каталога пользователя ~/.local/share/applications и имеет права на выполнение (в качестве программы).

[Desktop Entry]
Version=1.0
Type=Application
Name=Переименовать JPG в jpg
Comment=
Exec=/home/minter/Tools/scripts/modules/rename-nemo-JPG-to-jpg.sh
Icon=emblem-cozy-drive-1
Path=
Terminal=false
StartupNotify=false

Значение Exec= указывает на расположение данного сценария в файловой системе.
Значение Icon= указывает на значок, под которым кнопка запуска приложений будет отображаться. Значок указывается только по имени, то есть без пути и без расширения.

Если необходимо чтобы сценарий был запущен в терминале, то измените Terminal=false на Terminal=true

При указанном выше листинге файла desktop кнопка запуска "Переименовать JPG в jpg" будет расположена в категории "Прочее". Чтобы эта кнопка запуска отобразилась в категории "Графика" добавьте в конец файла строку Categories=Graphics;

пятница, 3 сентября 2021 г.

Пакетное преобразование аудиокниг mp3 в формат ogg с заданным битрейтом


Возникла необходимость уменьшения размера аудиокниг. Как правило, аудиокниги распространяются в формате mp3 с битрейтом 128 и более. Вследствие этого зачастую одно произведение может достигать размеров в среднем 500-600 Мб.

Экспериментальным образом выяснено, что если такие произведения преобразовать с формат ogg с битрейтом 16, который мне показался вполне достаточным для нормального прослушивания речи, то можно получить выигрыш в размерах произведений в несколько раз. Строго фиксированное значение указать сложно, но в среднем оно у меня достигало величин в 6-10, а то и более раз. В частности, конвертация 50-минутного произведения Альфреда Бестера "Кто-то там наверху меня любит", представленного исходным файлом mp3 128 кбит/с размером в 120 Мб позволила получить на выходе вполне комфортно воспринимаемый на слух файл ogg размером в 6,5 Мб.
 
Для преобразования вам понадобится пакет ffmpeg, который можно установить командой  sudo apt install -y ffmpeg   

Сама команда для преобразования имеет вид:
 
ffmpeg -i file.mp3 -b:a 16k -acodec libopus file.ogg
 
На первых порах через особое действие в правом контекстном меню оболочки XFCE она мной использовалась как действие для каждого файла с выводом уведомления о том, что файл ogg готов:

ffmpeg -i %f -b:a 16k -acodec libopus %f.ogg && zenity --width=130 --height=50 --info --text "\nogg ready" 2>/dev/null

Однако неудобство заключалось в том, что результирующие файлы имели расширение mp3.ogg, что приводило к необходимости переименования их расширения в ogg вручную, а также то, что исходные файлы mp3 также приходилоcь удалять вручную.

После мучительных поисков решения родился следующий сценарий, в ходе которого:

1) указывается папка с файлами mp3, которые необходимо преобразовать;

2) осуществляется поиск в указанной папке файлов mp3 и каждый найденный фал преобразовывается в формат ogg;

3) после преобразования исходные файл mp3 удаляются;

4) расширение файлов mp3.ogg приводится к виду ogg.

Текст сценария:

#!/bin/bash
dir=$(zenity --file-selection --directory)
find "$dir" -name "*.mp3" -exec ffmpeg -i {} -b:a 16k -acodec libopus {}.ogg \;
find "$dir" -name "*.mp3" -exec rm {} \;
find "$dir" -name '*.mp3.ogg' -exec sh -c 'mv "$0" "${0%.mp3.ogg}.ogg"' {} \;

В XFCE можно создать значок запуска, присвоив ему какую-либо картинку, например:


и запускать его через команду "Выполнить" правого контекстного меню мыши. Либо для такого сценария sh добавить на панель элемент "Запуск приложений", впоследствии указав в нём путь к файлу sh и отображаемый значок.

В процессе преобразования сценарий может осуществлять преобразование файлов не последовательно, а по ему одному известной  😀  очерёдности, что, впрочем, никак не влияет на функциональность. Ход процесса отображается в окне терминала:


Если sh запускался не по команде в окне терминала, а по кнопке запуска, то после завершения всех процессов окно терминала будет закрыто. В папке с файлами аудиокниги будут присутствовать только файлы ogg.

четверг, 2 сентября 2021 г.

Пакетное преобразование mp3 в ogg

Пакет dir2ogg является сценарием Python, расписывающим порядок совместной работы различных программ – раскодировщиков и кодировщиков ogg, что позволяет облегчить работу ему или ей по преобразованию своих музыкальных файлов в другой формат. dir2ogg преобразовывает файлы MP3, M4A, WMA, FLAC, и WAV в открытый формат OGG. Сайт автора – https://jak-linux.org/projects/dir2ogg 

Для установки dir2ogg в систему выполните в терминале команду

 sudo apt install -y dir2ogg

Моё знакомство с dir2ogg состоялось в ходе поисков инструмента для пакетного преобразования аудиокниг mp3 в файлы c более низким чем оригиналы битрейтом. И хотя dir2ogg мою проблему решить не смог (вследствие наиболее низкого битрейта на выходе – 80) сам по себе представляет интересное решение, к тому же работающее весьма шустро.

Использование dir2ogg описывается короткой справкой, которую можно получить по команде терминала dir2ogg --help

Для конвертации всех файлов mp3 в выбранной папке папке можно использовать команду:

dir2ogg -d "$(zenity --file-selection --directory)" -q N

N является цифрой, которая укажет с каким битрейтом осуществлять процесс перекодирования. К сожалению, в справке по пользованию это соответствие не приводится. Указывается только, что диапазон N составляет от 1 до 10, а значение по умолчанию равно 3. Соответствие значений N битрейту пришлось выяснять экспериментально:

  1 – 80
  2
96
  3
112
  4
128
  5
160
  6
192
  7
224
  8
256
  9
320
10
499

Пример работы dir2ogg указан на рисунке ниже:


вторник, 12 февраля 2019 г.

Про удаление файлов/папок через N дней через скрипт bash в Linux

При обмене отдельными файлами или файлами, организованными в папки, непременно возникает вопрос своевременного их удаления как устаревших или потерявших актуальность. Как правило, респонденты не удаляют предоставленные им данные: нет времени, потом, забыл(а) ... В итоге время нахождения контента в папках обмена начинает стремиться к бесконечности. Действительно, чего волноваться? Диски нынче большие, места хватает ...

Описанный ниже вариант используется в целях "найти и удалить контент старше N дней" в папках общего доступа таких ресурсов как Диск Яндекс, Dropbox, MEGA, pCloud. При этом каждая папка имеет свои настройки времени хранения контента, при превышении которого он подлежит удалению.

Примечание 1. Указанные в тексте команды могут быть не оптимальными с точки зрения правильного кодинга. Полагаю, что мне это может быть простительным, так как, не имея в данном вопросе профильного образования, информацию пришлось собирать по кусочкам с разных сайтов. Поэтому, по большому счёту, все приводимые ниже листинги являются своего рода компиляцией уже готовых решений.

Итак, обмен с использованием 5 ресурсов облачного хранения: 4 Яндекс Диска и 1 Dropbox. В каждом их них создана папка общего доступа.

Удалить файлы/папки старше N дней

Удаление устаревших файлов и папок осуществляется в ходе задания, запускаемого через cron, то есть без участия пользователя. В процессе выполнения задания создаются файлы отчётов - списка удалённого контента. При этом в имени файла отчёта содержится дата его создания. Файлы отчётов также подлежат удалению через определённое время (X дней).

Указанные выше операции осуществляются в ходе запуска и работы соответствующих клиентов синхронизации. Но их можно оформить и отдельно. В таком случае изменения в папках общего доступа будут переданы на облачные ресурсы в процессе очередного запуска сеансов синхронизации. Выбор варианта зависит от предпочтений пользователя.

Примечание 2. В силу особенностей запуска по расписанию клиентов pCloud и MEGA удаление в них файлов/папок старше N дней необходимо производить перед выполнением остановки клиента. Про остановку клиента читать здесь и здесь.

Объясняется это тем, что после запуска pcloud и megasync выполнение последующих за ними команд невозможно до тех пор, пока pcloud или megasync активны. А после выключения процессов pcloud или megasync нет синхронизации и, соответственно, передачи изменений в облако.


При создании скриптов было принято решение использовать так называемый модульный принцип, при котором в ходе работы скриптов, осуществляющих запуск и остановку клиентов, выполняются скрипты "очистки". Другими словами. были использованы скрипты в скриптах.

Скрипт очистки использует инструкции "если A, то B и если не А, то С".

if <запрос на соответствие условию>
then <действие 1>
else <действие 2>
fi

Самым первым действием является определения наличия какого-либо контента в папке обмена. Потому что если в ней ничего нет, то и дальнейшие действия не имеют смысла. Поэтому ищем файлы (а соответственно, будут найдены и папки, в которых они содержатся).

Перед выполнением указываются расположение папки для поиска (DIR1) и расположение папки отчётов (DIR2). DIR1 и DIR2 используются для того, чтобы в скрипте не писать каждый раз пути к папкам, заменяя их указанными переменными. Имена DIR1 и DIR2 указаны для примера. Для лучшего восприятия своих скриптов примените понятные Вам имена.

Формулировка условия описывается переменной filecount.

Команда "ничего не делать" соответствует символу двоеточия, то есть : .

DIR1=/home/user/Exchange/Beatrice
DIR2=/home/user/Exchange/Reports
filecount=`find $DIR1 -type f | wc -l`
if [ $filecount -eq 0 ];
then
:

Если же какие-то файлы присутствуют, то выполняется ряд последовательных операций:

– определить текущую дату;

– сформировать файл протокола с датой создания;

– удалить контент старше N дней.

else
date=`date '+%d'`
find $DIR1 -mtime +N > $DIR2/$date.Beatrice.txt
find $DIR1 -mtime +N -delete
fi

Примечание 3.

Результатом выполнения date является установка даты. В указанном выше случае файл будет иметь наименование, например, 18.Beatrice.txt, то есть за 18-число месяца. 


Если в имя файла есть необходимость включать и месяц, то переменная date должна быть указана в виде `date '+%m.%d'` Пример результирующего файла – 04.18.Beartice.txt

 %m соответствует текущему месяцу, а %d – дню месяца.

Примечание 4.
Имеется несколько вариантов команды удаления: 


 find /path -mtime +N -exec rm -rf {} \; 

 find /path -type f -mtime +N | xargs rm -rf  

 find /path -mtime +N -delete

В средней команде указан поиск файлов: -type f   Для папок вводить -type d

На одном из форумов было найдено, что -delete работать будет быстрее. Так как лично мне была более понятна команда -delete, то она и приводится во всех указанных ниже листингах команд.


Уточнение для Dropbox и MEGA. В папках общего доступа таких клиентов могут находиться скрытый файл .dropbox или папка .debris Поэтому целесообразно исключить их из удаления, добавив инструкцию "кроме".

Кроме –  ! -name 'имя_объекта'. Например:

find $DIR1 ! -name '.dropbox' -mtime +N -delete или

find $DIR1 ! -name '.debris' -mtime +N -delete

Примечание 5.

При использовании параметра +N Вы можете быть удивлены тем, что контент будет удалён не через N дней, а позднее. Это связано в тем, что аргумент -mtime интерпретируется как количество целых дней. То есть, -mtime +N означает строго больше , -mtime -N означает строго меньше. Другими словами, если возраст объекта составляет 1 день, 23 часа, 59 минут и 59 секунд, то -mtime +1 обрабатывает его, как будто это 1 день, 0 часов, 0 минут. Связано с особенностями программной реализации.

В итоге получается, что -mtime +1 выбирает файлы, которые были изменены как минимум 2 дня назад. Чтобы получить файлы, измененные не менее 1 дня назад, используйте -mtime +0

Другой способ. Если необходимо удалить файлы старше чем, например, ровно 48 часов, то используйте –daystart: find /path type -f -daystart -mtime +1

Если необходимо указывать минуты, то используется -mmin N, что соответствует утверждению "данные файлы последний раз изменены N минут назад.


Примечание 6.

Для использования других параметров ниже приводится краткая справка.

atime

atime означает время доступа. Эта временная метка сообщает, когда последний раз обращались к файлу. Изменяется, если использовались cat, vim, less или какой-либо другой инструмент для чтения или отображения содержимого файла.

mtime

mtime означает время изменения (модификации). Означает, что содержимое файла было изменено путем редактирования файла. При копировании или переносе в другое место хранения это значение не изменяется.

ctime

ctime означает время изменения статуса. Эта временная метка сообщает, когда был последний раз были изменены свойства и метаданные файла. Метаданные включают права доступа, права собственности, имя и местоположение файла.

Как просмотреть временные метки файла? Командой stat . Пример:

stat ~/winehq.key
Файл: /home/user/winehq.key
Размер: 3220 Блоков: 8 Блок В/В: 4096 обычный файл
Устройство: 801h/2049d Inode: 18880312 Ссылки: 1
Доступ: (0664/-rw-rw-r--) Uid: ( 1000/ minter) Gid: ( 1000/ user)
Доступ: 2018-12-20 03:48:48.108006716 +0300
Модифицирован: 2018-12-19 17:07:25.000000000 +0300
Изменён: 2018-12-20 03:48:42.368059166 +0300
Создан: -

Как узнать, когда был изначально создан файл?

Вы заметили последнюю строку вывода команды stat? В нём указывается «Создан». Можно предположить, что это представляет собой timestmap, когда файл был «рождён» (или создан, если быть более точным).

Хотя ext4 поддерживает временную метку создания, команда stat в настоящее время не может её показать. Возможно, будущие версии команды stat покажут временную метку создания в строке «Создан».

В некоторых случаях нужно выяснить, был ли файл удален и пересоздан заново или это тот самый оригинальный файл. По параметру ctime достоверно сказать об этом нельзя, так как он может меняться при любых изменениях атрибутов. Поэтому нужен другой параметр для проверки. В тот момент, когда файл удаляют и создают заново с тем же именем, большая часть его атрибутов остается неизменной. Меняются в основном два – ctime и inode. ctime покажет, когда последний раз изменились атрибуты файла (совсем не обязательно, что из-за удаления и создания), а inode изменится, так как для операционной системы это будет уже совсем другой файл с новым индексным дескриптором.

Смотреть inode можно двумя способами:

stat
ls -i


Ожидается, что в результате выполнения find $DIR1 -mtime +N -delete будут найдены и удалены все объекты старше N дней. Однако, как говорят, "гладко было на бумаге, да забыли про овраги".

На практике выяснилось, что могут иметь место случаи, когда "хорошая мысля пришла апасля" и файлы могут быть перемещены в другую созданную позднее папку. Получится ситуация, при которой mtime созданной папки более "молодой", чем mtime содержащихся в ней файлов. В итоге – после удаления в ней файлов эта папка не будет удалена (другое значение mtime) и будет представлять из себя пустой объект.

Также в ходе тестирования имели место случаи, когда после удаления файлов из папок с составными именами сами папки не были удалены:


В этом случае можно использовать условие "посчитаем пустые папки". Если ничего не будет найдено, то ничего и не делаем. Если что-то найдём, то удалим. При этом исключим из удаления саму папку общего доступа (в рассматриваемом случае Beatrice), так как было несколько случаев удаления подобной папки, не содержащей уже никаких данных.

dircount=`find $DIR1 -type d -empty | wc -l`
if [ $dircount -eq 0 ];
then
:
else
find $DIR1 ! -name 'Beatrice' -empty -delete
fi

Аналогичные описанным выше действия применяются и для файлов отчётов. То есть используется алгоритм:

– найти в папке отчетов файлы в имени которых присутствует Beatrice.txt. В самом начале процедуры удаления удаления такой файл был сформирован. Его полное имя будет, например, 18.Beatrice.txt (см. выше);

– если таких файлов не найдено, то ничего не делать;

– при нахождении удалить такие файлы старше X дней.

filecount=`find $DIR2 -name *.Beatrice.txt -mtime +X | wc -l`
if [ $filecount -eq 0 ];
then
:
else
find $R -name *.Beatrice.txt -mtime +X -delete
fi

Следует отметить, что файл отчёта будет создаваться всегда. Если никаких объектов для удаления не назначено, то такой файл будет пустым. Следовательно, во избежание "замусоривания" папки отчётов такие файлы необходимо найти и удалить.

filecount=`find $DIR2 -name *.Beatrice.txt -empty | wc -l`
if [ $filecount -eq 0 ];
then
:
else
find $R -name *.Beatrice.txt -empty -delete

Завершить выполнение скрипта командой exit

Итого, полный текст скрипта будет иметь вид:

#!/bin/bash
DIR1=/home/user/Exchange/Beatrice
DIR2=/home/user/Exchange/Reports
filecount=`find $DIR1 -type f | wc -l`
if [ $filecount -eq 0 ];
then
:
else
date=`date '+%d'`
find $DIR1 -mtime +N > $DIR2/$date.Beatrice.txt
find $DIR1 -mtime +N -delete
fi
dircount=`find $DIR1 -type d -empty | wc -l`
if [ $dircount -eq 0 ];
then
:
else
find $DIR1 ! -name 'Beatrice' -empty -delete
fi
filecount=`find $DIR2 -name *.Beatrice.txt -mtime +X | wc -l`
if [ $filecount -eq 0 ];
then
:
else
find $DIR2 -name *.Beatrice.txt -mtime +X -delete
fi
filecount=`find $DIR2 -name *.Beatrice.txt -empty | wc -l`
if [ $filecount -eq 0 ];
then
:
else
find $DIR2 -name *.Beatrice.txt -empty -delete
exit

Оформите как исполняемый файл. Например, clean или clean.sh. Принципиального значения наличие/отсутствие расширения не имеет. Важно лишь то, чтобы такой файл был исполняемым.

Примечание 7. На практике в Linux Mint 19 xfce через свойства файла в менеджере файлов Thunmar файлам без расширения (скриптам) не удавалось установить "исполняемый". В таком случае его можно переименовать из, например, clenan в clean.sh, назначить его исполняемым, а затем переименовать его обратно в clean. "Исполняемость" файла сохранится.

В случае отсутствия необходимости создания файлов отчётов и их последующего удаления через X дней приведенный выше текст скрипта упрощается до вида:

#!/bin/bash DIR=/home/user/Exchange/Beatrice
filecount=`find $DIR -type f | wc -l`
if [ $filecount -eq 0 ];
then
:
else
find $DIR1 -mtime +N -delete
fi
dircount=`find $DIR -type d -empty | wc -l`
if [ $dircount -eq 0 ];
then
:
else
find $DIR ! -name 'Beatrice' -empty -delete
fi
exit

Примечание 8. Не забывайте про особенность общих папок в Dropbox и MEGA. Добавляйте для них исключения .dropbox и .debris (см. выше).

Запустить клиент и удалить папки/файлы старше N дней

Запуск клиента Диска Яндекс

Поясняющие подробности можно прочитать здесь. Приводится только пример скрипта.

#!/bin/bash
crash=/home/user/.config/yandex-disk/crash.txt
D1=/home/user/.config/yandex-disk
D2=/home/user/scripts/yandex/client-1
if [ -f $crash ]; then
rm -f $D1/crash.txt
else
:
fi
rm -f $D1/config.cfg
rm -f $D1/iid
rm -f $D1/passwd
cp $D2/config.cfg $D1
cp $D2/iid $D1
cp $D2/passwd $D1
yandex-disk start
sleep 60
/home/user/scripts/clean-1
sleep 240
yandex-disk stop
sleep 5 && exit

Примечание 9.

После старта клиента Диска Яндекс (yandex-disk start) даётся время на запуск клиента и его соединение с облаком (sleep 60). Затем осуществляется очистка. После этого даётся 4 минуты на приём/передачу данных (sleep 240), после чего следует команда остановки клиента и завершения работы скрипта. 60 секунд и 240 секунд указаны условно. Пользователь сам определяет сколько времени должно пройти и следует ли ему использовать первое ожидание (sleep 60).


Если на Диске Яндекс больше чем 1 папка обмена, то тогда на каждую папку создаётся свой скрипт. Они, соответственно, должны быть запущены один за другим, например:

/home/user/scripts/clean-1
/home/user/scripts/clean-2
/home/user/scripts/clean-3

Ожидание 5 секунд после команды остановки Диска Яндекс введено "на всякий случай", чтобы гарантировать остановку клиента с используемой конфигураций. Это обусловлено тем, что у меня последовательно другом за другом запускаются 4 Диска Яндекс, каждый со своими настройками.

Если у Вас только 1 учётная запись Диска Яндекса, то нет необходимости переписывать конфигурацию клиента. Скрипт упрощается до вида:

#!/bin/bash
yandex-disk start
sleep 60
/home/user/scripts/clean-1
sleep 240
yandex-disk stop
exit

Запуск клиента Dropbox

Пример:

#!/bin/bash
dropbox start
sleep 40
/home/user/scripts/clean-4.sh
sleep 260
dropbox stop
exit

Скрипт запуска клиентов с очисткой

Например, у меня оформлен запуск 5-ти клиентов последовательно друг за другом. Перед запуском очереди заданий клиентов Диска Яндекс проверяется наличие уже запущенного экземпляра Диска Яндекс. Если такой экземпляр будет найден, то выдаётся команда на его остановку.

#!/bin/bash
yd=/tmp/yandex-disk-*
if [ -d $yd ]; then
yandex-disk stop
else
:
fi
sleep 5
/home/user/scripts/yandex/client1/daemon
/home/user/scripts/yandex/client2/daemon
/home/user/scripts/yandex/client3/daemon
/home/user/scripts/yandex/client4/daemon
/home/user/scripts/dropboxauto
exit

При включении мной такого задания по расписанию имелось в виду, что каждое задание выполняется не менее 5-ти минут. Следовательно, общее время выполнения указанных заданий составит не менее 25-ти минут. В реальности оно больше за счёт различного рода пауз между отдельными операциями, поэтому его продолжительность была оценена в 30 минут.

среда, 14 ноября 2018 г.

Linux. Зеркальная копия каталога на другой хост с помощью ssh

Сохранность данных пользователя – головная боль пользователя, который сам должен позаботиться о том, чтобы ничто из "нажитого непосильным трудом" (из к/ф "Иван Васильевич меняет профессию) не пропало. И если сам пользователь сам об этом не позаботится, то никто другой за него это не сделает. А если он не сумеет это сделать сам, то о таком должен позаботиться близкий человек.

Ранее мной был описан вариант создания резервной копии, транслируемой из одного облака в другое при помощи инструмента создания зеркальной копии данных grsync.

Имеющееся решение предусматривало сохранение критически важных данных с компьютера Windows на Диск Яндекс в реальном масштабе времени (синхронизация). Сохранённые на Диск Яндекс данные предоставлялись в доступ в режиме "только чтение" другой учётной записи Яндекс, которые синхронизировались на другой компьютер под управлением Linux. Полученные данные с помощью grsync зеркалировались в другую папку, синхронизируемую с облаком MEGA.

С появлением ещё одного компьютера решение задачи решено было немного изменить, чтобы зеркальная копия данных с одного компьютера Linux осуществлялась на другой компьютер Linux. При этом, чтобы избежать погружения в тонкости операций с терминальными командами Linux, решение будет базироваться на использовании уже готовых бесплатных инструментов.

Так как доступ к файловой системе второго компьютера в силу определённых причин решено было осуществлять не через Samba, а через SSH, то возникла, на первый взгляд, неразрешимая ситуация, связанная с тем, что выбранное ПО для синхронизации данных FreeFileSync не "умеет" работать с SSH.

И хочется, и колется, и мамка не велит ... Но, как говорится, если нельзя, но очень хочется, значит можно. Поэтому, чтобы было "моня", используем инструменты rclone + rclone browser, который будет транслировать содержание удалённого ресурса SSH в локальный каталог компьютера.

Не буду останавливаться на настройке FreeFileSync. Несмотря на англоязычность сайта, после скачивания архива tar.gz, его последующей распаковки и запуска файла FreeFileSync Вы обнаружите, что программа "разговаривает" по-русски.



На что следует обратить внимание?

Вызовите команду "Действия – Настройки синхронизации" (или нажмите F8). Так как SSH "не понимает" действия удаления в корзину, то следует указать безвозвратное удаление на приёмнике. То есть, при удалении из неё элементов (источник) такие же действия производятся и на приёмнике (получателе).


Второй особенностью является то, что данные для синхронизации источника будут хранится в каталоге, подлежащем зеркалированию, в виде скрытого файла .sync.ffs_db  А как указывалось в поставленной задаче выше, источник синхронизируется с Диском Яндекс в режиме "только чтение". И если файл .sync.ffs_db будет оставаться в каталоге, то при очередном сеансе синхронизации с Диском Яндекс будет отображена ошибка синхронизации, связанная с невозможностью записи файла .sync.ffs_db (ресурс "только чтение").

Решение заключается в том, чтобы:

1) зеркалирование каталога с помощью FreeFileSync осуществлялось при выключенном демоне Диска Яндекс, а при работающем демоне Диска Яндекс файла .sync.ffs_db в синхронизируемом каталоге быть не должно;

2) при запуске FreeFileSync файл .sync.ffs_db записывается в зеркалируемый каталог, а при выключении FreeFileSync файл .sync.ffs_db перемещается в другое место.

Исходя из п.2, для запуска FreeFileSync будет использоваться скрипт sh. Ниже приводится текст реального скрипта:

#!/bin/bash
mv /home/cemea/Yandex/Rovena/.sync.ffs_db /home/cemea/Yandex/Rovena/Логика
/home/cemea/Tools/FreeFileSync/FreeFileSync
mv /home/cemea/Yandex/Rovena/Логика/.sync.ffs_db /home/cemea/Rovena/Traidex
zenity --info --text "sync.ffs_db сохранён" 2>/dev/null --timeout=3
sleep 1 && exit

Теоретически можно предположить, что на компьютере Windows винчестер "прикажет долго жить". И даже то, что по "закону подлости" одновременно с ним выйдет из строя и винчестер на компьютере Linux. Но если возникнет ситуация, при которой одновременно "вылетят" винчестеры всех трёх компьютеров, то в этом случае останется лишь восклицать "дас ист фантастиш" и ...

суббота, 9 декабря 2017 г.

Оптимизация изображений

Возникла необходимость передачи полученных изображений через Интернет. И всё было бы хорошо, если бы не объём контента: 275 фото "весят" 2,6 Гб. При этом каждое из фото имеет горизонтальный и вертикальный размеры 6000х4000.

После быстрого поиска в Интернет был найден онлайн-ресурс optimizilla.com.

Как указано в пояснении, "Этот оптимизатор изображений использует эффективную комбинацию лучших алгоритмов сжатия с потерями/без потерь для уменьшения размера изображений в форматах JPEG и PNG до минимально возможного уровня."

На главной странице возможность предоставляется возможность загрузки как одного изображения для его последующей обработки, так 20-ти изображений сразу, оптимизация которые будет выполнена в рамках пакетного задания.

После загрузки каждого из изображений его оптимизация осуществляется автоматически:



По мере готовности каждое из оптимизированных изображений можно скачать отдельно. При этом указана его степень сжатия, полученная в результате обработки. Данная величина является переменной. В рассматриваемом примере она варьировалась в диапазоне 85-88 %. Имя обработанного файла будет иметь приставку -min, например, 078-min.jpg


Выделив мышкой изображение на странице ниже можно наблюдать исходный файл и результирующий. При этом правым движком можно регулировать степень сжатия, если у Вас появится несогласие с параметром, автоматически выбранном системой для конкретного фото.



Судя по картинкам выше, хранение на своём жёстком диске 943 Кб вместо 6,4 Мб представляется более предпочтительным вариантом в плане экономии дискового пространства. При этом размеры по горизонтали и вертикали остаются неизменными.

Как только обработка всех загруженных в очередь 20-ти изображений будет завершена, результат можно скачать одним архивом zip, нажав на кнопку


Обработанные онлайн фото доступны для скачивания в течение 1 часа, по истечении которого автоматически уничтожаются. Адрес ресурса: http://optimizilla.com

В результате оптимизации 275 изображений с общим размером 2,6 Гб на выходе получилось 353 Мб. Неплохой результат?

вторник, 4 февраля 2014 г.

Пакетная обработка фото в Ubuntu Linux


Программа XnConvert позволяет осуществить пакетную обработку изображений. При обработке изображений самым востребованным для меня действием является изменение размера 10-20 изображений. Ранее размер каждого изображения я менял с помощью программы Gimp. Но XnConvert позволяет это сделать буквально за несколько секунд.

Перейдите на сайт программы. Найдите заголовок Image Processing & Batch и нажмите ниже на ссылку XnConvert. Или посетите непосредственно раздел XnConvert. Листайте страницу вниз. После заголовков Features и Screenshots Вы увидите Downloads. Скачайте нужный Вам дистрибутив:


Например, у меня это Linux DEB 64-bit. После установки пакета ярлык для запуска программы будет расположен в разделе "Графика".

Программа имеет русский интерфейс. Как пользоваться Вы сразу поймёте, ознакомившись с меню навигации и кнопками. Ниже пойдёт речь про использование программы для пакетного изменения размеров изображений.

Найдите вверху и нажмите на кнопку: "Входные данные: 0 файлов". Используйте нижнюю кнопку "Добавить файлы" для добавления файлов, которые необходимо преобразовать или папку с файлами целиком:


Укажите действия, которые необходимо осуществить с выбранными файлами. Как Вы видите, существуют различные настройки, которые можно изменять по своему усмотрению:


Если стоит галочка "Сохранять пропорции", то, при указании только ширины или только высоты второй параметр будет изменён автоматически. Справа можно видеть предпросмотр назначенной операции:



В выходных данных можно указать папку, в которую будут помещены обработанные файлы. Причём, если такой папки у Вас нет, то программа её создаст автоматически:


Испольуйте кнопку справа, чтобы указать меcтонахождение папки:


Настройте, при необходимости, другие параметры:



и нажмите на кнопку:


По умолчанию, настройки программы предусматривают проверку обновлений программы раз в месяц.