Руководство по допиливанию для новичка- от новичка

Автор el guahiro, июля 26, 2015, 17:02:01

« предыдущая - следующая »

el guahiro

марта 09, 2020, 02:43:19 #1455 Последнее редактирование: марта 21, 2020, 15:05:00 от el guahiro
Освобождаем место на Android смартфоне средствами Linux
Внезапно Google попросил у меня купить платную подписку Google Drive - типо место закончилось.
У меня за короткий период времени скопилось на  смартфоне около 15 Gb фоток, хотя я не фанат фотографии. И хотя осталось ещё достаточно места, подумалось, что неплохо бы:
a) Удалить тяжёлые фотки и видео из Google аккаунта (чтобы не включать платный);
б) Сделать коллекцию фоток полегче, что удобно во многих отношениях, прежде всего от переполнения харда смартфона где-нибудь за границей или в турпоходе, где чистить данные штатными средствами Android некогда и долго.
Посему решаю переконвертировать все фоты в webp и видео в webm - это в 10 раз легче при правильно подобранных параметрах.
1) Делаю ПКМ Thunar на команду (!! Внимание, там где фотографий больше сотни, лучше запускать команду в терминале, частями, см.ниже):
find . -regex  '.*\(jpg\|JPG\|jpeg\|JPEG\|png\|PNG\).*' -print0  | xargs  -0 -L1 file --mime-type |sed -n 's#: *image/[^ :]*$##p' | parallel 'cwebp -q 50 -m 6 -z 9 {} -o {.}.webp' ; find . -regex ".*\(jpg\|JPG\|jpeg\|JPEG\|png\|PNG\)$" -execdir copy_date_from_file.sh {} \+ ; find . -regex  '.*\(jpg\|JPG\|jpeg\|JPEG\|png\|PNG\).*' -delete;  notify-send "Закончено!"Условие появления ПКМ: Каталоги.
Здесь скрипт copy_date_from_file.sh такого содержания:
#!/bin/bash
IFS=$'\#'
for f in *.tif *.TIF *.jpg *.JPG *.jpeg *.JPEG *.png *.PNG ; do touch -r "$f" "${f%.*}".webp ;  done
Ему надо дать права на исполнение и забросить в ~./local/bin
Объединённая команда иногда не успевает зацепить дату, поэтому делаем команды по порядку:
find . -regex  '.*\(jpg\|JPG\|jpeg\|JPEG\|png\|PNG\).*' -print0  | xargs  -0 -L1 file --mime-type |sed -n 's#: *image/[^ :]*$##p' | parallel 'cwebp -q 50 -m 6 -z 9 {} -o {.}.webp'
find . -regex ".*\(jpg\|JPG\|jpeg\|JPEG\|png\|PNG\)$" -execdir copy_date_from_file.sh {} \+;
find . -regex  '.*\(jpg\|JPG\|jpeg\|JPEG\|png\|PNG\).*' -delete;  notify-send "Закончено!"
Вышеприведённая группа команд позволяет преобразовать рекурсивно все картинки в webp в глубово вложенных директориях на серьёзном для домашнего юзера объёме файловой системы - я проделал это на рабочем ноуте в папке с проектами весом100+ Gb.
Проверить, какие картинки остались в папке:
find . -type f -exec file {} \; | awk -F: '{if ($2 ~/image/) print $1}' Проверить дату получившихся webp файлов:
find . -regex ".*\(webp\)$" -exec stat --format '%Y :%y %n' "{}" \;  | sort -r
Поскольку файлов у меня много, для первого раза, скопировав файлы с устройтсва, запустил в папке с фотками вышеуказанную длинную команду. Надо же видеть, что происходит...
В результате работы команды исходные файлы, заменяемые на webp, удаляются,  в конце вылезает уведомление что всё готово.
Однако при копировании файлов по MTP протоколу (по шнурку) на Android с  ноутбука, реальная дата создания файлов теряется, и устанавливается текущая.
В альбоме с фотографиями и видео наступает хаос, т.к. все фоты не рассортированы по годам и месяцам, как мы привыкли..
Не беда! Поможет установка ADB:
sudo apt-get update
sudo apt-get install android-tools-adb
sudo apt-get install android-tools-fastboot
Когда ADB установлен, включаем отладку по USB на Adnroid девайсе , подключаем его по шнурку к ноутбуку и делаем в терминале:
adb devicesтерминал мне выдал
List of devices attached
SBXDU19416005529 device
Ok, смартфон виден компьютеру.
Копировать файл или директорию с устройства можно командой:
adb pull /sdcard/директория_в_смартфоне/файл /директория_в_ноутено проще через копирование Thunar. У меня оно дату создания не сбивает (связка телефон Huawei - ноут Dell).
При копировании по adb это выглядит так (команды adb копируют файлы с конкретным названием, не поддерживая *, поэтому копирую папку с фотками):
user@device:~$ adb pull /sdcard/DCIM/Camera/ '/home/user/Рабочий стол/фото смартфон Huawei P 30 Lite/'
/sdcard/DCIM/Camera/: 1996 files pulled. 24.5 MB/s (13894621963 bytes in 541.105s)
Чтобы послать файл на смартфон. используем команду в терминале ноутбука:
adb push /директория_в_ноуте/файл /sdcard/директория_в_смартфонеАдрес "директория_в_смартфоне" можно посмотреть в файловом менеджере на смартфоне.
Потом, выключаю синхронизацию папки с Google Photo в настройках Android : Google Photo> Настройки>Автозагрузка и синхронизация, через файловый менеджер на телефоне удаляю папку DCIM/Camera и создаю её заново.
Через интерфейс Google Photo удаляю все фоты с аккаунта Google.
Также в папке на ноуте сжимаю видео в webm. В один поток (медленно)::
find ./  "$VIDEOS" -maxdepth 1 -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis "${0%%.mp4}.webm"' {} \;..иногда выдаёт ошибку, сжатие не максимальное.
Поэтому лучше так, с помощью gnu parallel (быстро):
parallel -j 4 'ffmpeg -v 0 -i "{}" $vp9_params $opus_params -f webm "{.}.webm"' \</dev/null ::: *.mp4Потом беру метку времени у первоначальных файлов
for i in *.mp4 ; do touch -r "$i" "${i%.*}".webm; doneИ в завершение удаляю исходные файлы:
rm ./*mp4
Потом, отправляю файлы обратно в смартфон с помощью команды:
for f in *.webp ; do adb push "$f" '/sdcard/DCIM/Camera' ; done
for f in *.webm ; do adb push "$f" '/sdcard/DCIM/Camera' ; done
Включаю синхронизацию папки с Google Photo в настройках Android : Google Photo> Настройки>Автозагрузка и синхронизация.
Предварительно через интерфейс файлового менеджера смартфона удаляю фотки со смартфона.
Все файлы, скопированные таким методом, сохранили в смартфоне свою реальную дату создания, расположившись в Галерее смартфона в точно таком же порядке, как и оригинальные фотки.
Коллекцию фоток описанным методом сжали в 7 раз.
К сожалению, webp похоже не поддерживает геотеги, но разработчики обещают.
В завершение, ночная панорама заволжских видов около г. Нижний Новгород, вид от памятника Чкалову, около Кремля. Размер 9908x3299 px. Сшит с фоток, снятых "с руки" на Huawei P 30 Lite в программе Hugin.Файл весит всего 462 kB...правда, при загрузке на сервис https://ibb.co они зачем-то его преобразовали в jpeg 11 mb.


PS. от 23 марта. Поправил команду, т.к. чистил свой ноут и уже по опыту ошибок добавил рекурсивный запуск сразу в больших глубоко вложенных директориях. Директорию с проектами на 100 Gb чистил минут 30, выбрав и преобразовав все картинки в webp. Сэкономил 15 Gb.

Надеюсь, кому-то поможет. Искренне ваш, el
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions

el guahiro

марта 18, 2020, 22:36:47 #1456 Последнее редактирование: марта 19, 2020, 13:02:20 от el guahiro
Иногда бывает необходимость посмотреть последние изменённые файлы или директории. Особенно, если файловая структура большая и память уже подводит. Можно воппользоваться gnome-search-tool или mate-search-tool (последняя удобней, я об этом писал) и задать поиск по последним файлам за период.
Мне лично забивать даты влом, поэтому сочинилось действие ПКМ Thunar под названием "Последние 25 файлов/директорий" на команду:
zenity  --width 1400 --height 700 --info --title="Последних 25" --text="$(find %f -type f -printf '%%TY-%%Tm-%%Td %%TT %%p\n' | sort -r | head -25)"; zenity  --width 1400 --height 700 --info --title="Последних 25" --text="$(find %f -type d -printf '%%TY-%%Tm-%%Td %%TT %%p\n' | sort -r | head -25)"Условие появления: Каталоги.
Иконка: любая
Можно ширину width  и высоту height  изменить под разрешение своего экрана.
Теперь, при нажатии на этот ПКМ вылезает табличка с последними 25-ю изменёнными файлами, в при нажатии Ok на этой табличке - вылезает табличка с последними 25-ю изменёнными директориями. Очень удобно.

Всем не болеть. И не падать духом. Искренне ваш, el
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions

el guahiro

марта 18, 2020, 23:36:25 #1457 Последнее редактирование: марта 19, 2020, 09:03:16 от el guahiro
#Restore photo creation dates from your Android, IOS, Windows Phone camera
В результате бестолковых бэкапов, переноса видео- и фотоколлекции с харда на хард образовалась коллекция видео и фото со сбитыми датами создания. Это мешает сортировке фотоколлекции, особенно если забросить в в Google Photo, то получается каша.
Исправляю это.
1. Сначала в тех папках, где я ещё не конвертнул изображения в webp:
exiv2 -T rename *.jpgУтилита exiv2 есть в репах, ставится без проблем.
Получилось не везде. Извлекаю даты из имён файлов.
Вытираю с помощью find все буквы, тире и нижние подчёркивания:
rename 's/_|-|img|IMG|WP//gi' ./*Если есть другие буквы, впишите вместо WP (вряд ли у вас был Windows Phone).
Потом выставляю время в часах и минутах
for i in *.mp4; do touch -t ${i:0:12} $i; done;for i in *.MOV; do touch -t ${i:0:12} $i; done;for i in *.webp; do touch -t ${i:0:12} $i; done;for i in *.jpg; do touch -t ${i:0:12} $i; done;for i in *.JPG; do touch -t ${i:0:12} $i; done;Если с именами что-то не так (какая-то мыльница у сына в спортлагере), то делаю:
for i in *.webp; do touch -t ${i:0:8} $i; done;
Время выставляется в днях, остальное будет по нулям
for i in *.mp4; do touch -t ${i:0:8}С секундами пробовал
for i in *.webp; do touch -t ${i:0:12}.${i:13:14} $i; done; что-то не выходит. Да и ладно, секунды не очень нужны.
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions

el guahiro

марта 24, 2020, 20:14:47 #1458 Последнее редактирование: марта 26, 2020, 12:33:56 от el guahiro
Сэкономил много места при упорядочивании архивов проектов командой:
replace_duplicates2hardlink.shЗапускается в директории, где хотим заменить дубликаты на хардлинки.
Скрипт чутка доделан аффтором этих строк и вобщем-то вполне понятен (сравнивает файлы  и затем делает хардинки вместо дубликатов):
#!/bin/bash
#from https://unix.stackexchange.com/questions/3037/is-there-an-easy-way-to-replace-duplicate-files-with-hardlinks
find "$PWD" -type f -exec md5sum {} \; | sort > /tmp/sums-sorted.txt
OLDSUM=""
IFS=$'\n'
for i in `cat /tmp/sums-sorted.txt`; do
 NEWSUM=`echo "$i" | sed 's/ .*//'`
 NEWFILE=`echo "$i" | sed 's/^[^ ]* *//'`
 if [ "$OLDSUM" == "$NEWSUM" ]; then
  echo ln -f "$OLDFILE" "$NEWFILE"
 else
  OLDSUM="$NEWSUM"
  OLDFILE="$NEWFILE"
 fi
done
Этот скрипт освободил мне несколько Gb на SSD.

PS Утилиты FSlint, которая делает тоже, только в GUI, никто не отменял.
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions

el guahiro

марта 29, 2020, 17:27:01 #1459 Последнее редактирование: марта 30, 2020, 00:53:19 от el guahiro
Сшить панораму в один клик за 10 секунд
Stitch a panorama in one click in 10 seconds
С недавнего времени у меня сломался сшиватель панорам Hugin. Никакие усилия по чистке конфигов и кэша, по перустаноке и настройке к результатам не привели. Возможно, я исчерпал лимит доверия у китайских товарищей, т.к. слишком часто пользовался программой.
Можно, конечно, клеить панорамы в  dermandar.com http://www.dermandar.com/create/, но это надо браузер открывать. К тому же приложухха требует включения Adobe Flash Player, что как-бы сейчас уже не приветствуется.
Панорамы склеивает Google Photo, но когда оно вам её склеит, одному Гуглу известно.
Пришлось запилить Действие ПКМ по склейке панорам офлайн самому.
Действие основано на программке OpenPano отюда, лицензированного опенсорсной MIT лицензией.
На сайте автора есть толковая инструкция, что делать. Качаю архив по ссылке с сайта автора, распаковываю, компилирую программку, потом бросаю готовый архив в домашнюю директорию и делаю ПКМ Thunar на команду:
cp /$HOME/OpenPano-master/src/config.cfg "$PWD" ; image-stitching %F | zenity --progress --width=300 --height=100 --title="Сшиваю панораму" --text "...надо было ровней камеру держать!" --auto-close --pulsate; touch -r %f out.jpg ; mv out.jpg pano_%n && rm config.cfgУсловие появления: Изображения, каталоги
Иконка: Любая.
Перед этим надо отправить исполняеммый файл в директорию, где у вас находятся исполняемые файлы, командой:
ln -s  /home/user/OpenPano-master/build/src/image-stitching $HOME/.local/binИ да, надо доставить из репов zenity. Можно обойтись и без zenity, но тогда будет чуть менее интерактивно, а команда будет выглядеть так:
cp /$HOME/OpenPano-master/src/config.cfg "$PWD" ; image-stitching %F ; touch -r %f out.jpg ; mv out.jpg pano_%n && rm config.cfgТеперь, при выделении группы картинок и нажатии ПКМ "Сшить панораму" через двадцать-тридцать секунд в  текущей директории появляется сшитая панорама со временем создания, как у группы исходных фото, что важно для организации коллекции фотографий например в Google Photo.
Ссылка на архив с уже скомпилированной под Xubuntu 18 программой: https://mega.nz/#!MBoURIyB!ccTQ8koTK73g062tDuLwlG1Gs80rpjArmJsrYL6V104
Видео как это работает:
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions

el guahiro

марта 31, 2020, 11:36:22 #1460 Последнее редактирование: марта 31, 2020, 11:38:24 от el guahiro
Действие ПКМ "Добавить дату к названию".
Оказалось, что удобнее для сортировки названий в сложной файловой системе добавлять дату в начале названия папки (директории), причём в формате Год.Месяц.День. Команда:
[ -f %f ] && rename-with-date.sh %f ; [ -d %f ] &&  for i in %n; do mv -v  "$i" "`date +"%%Y.%%m.%%d"`_$i "; doneУсловия появления: галки ставим везде
Файлы датируются после названия, перед расширением. Содержание скрипта rename-with-date.sh я давал в этой теме форума.
Для любителей bash - обратите внимание на построение команды ПКМ  - тут дана альтернатива if-else-fi, мне она кажется проще.

Всем здоровья. Искренне ваш, el guahiro.
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions