Pull to refresh

Comments 17

 ls -l /dev/disk/by-id/
lrwxrwxrwx 1 root root    9 Ноя 10 04:04 ata-Hitachi_HDS5C3030ALA630_MJ1311YNG5H6EA -> ../../sdd
lrwxrwxrwx 1 root root    9 Ноя 10 04:04 ata-Hitachi_HDS723030ALA640_MK0311YHG46TNA -> ../../sdg
lrwxrwxrwx 1 root root   10 Ноя 10 04:04 ata-Hitachi_HDS723030ALA640_MK0311YHG46TNA-part1 -> ../../sdg1
lrwxrwxrwx 1 root root    9 Ноя 10 04:04 ata-INTEL_SSDSA2CT040G3_CVPR113101TB040AGN -> ../../sde
lrwxrwxrwx 1 root root   10 Ноя 10 04:04 ata-INTEL_SSDSA2CT040G3_CVPR113101TB040AGN-part1 -> ../../sde1
lrwxrwxrwx 1 root root    9 Ноя 10 04:04 ata-SAMSUNG_HD204UI_S2H7J1SZ910745 -> ../../sdf
lrwxrwxrwx 1 root root   10 Ноя 10 04:04 ata-SAMSUNG_HD204UI_S2H7J1SZ910745-part1 -> ../../sdf1
lrwxrwxrwx 1 root root    9 Ноя 10 04:04 ata-ST31500541AS_5XW035A8 -> ../../sdh
lrwxrwxrwx 1 root root   10 Ноя 10 04:04 ata-ST31500541AS_5XW035A8-part1 -> ../../sdh1
lrwxrwxrwx 1 root root    9 Ноя 10 04:04 ata-WDC_WD1500HLFS-01G6U1_WD-WXC0CA9S7468 -> ../../sda
lrwxrwxrwx 1 root root   10 Ноя 10 04:04 ata-WDC_WD1500HLFS-01G6U1_WD-WXC0CA9S7468-part1 -> ../../sda1
lrwxrwxrwx 1 root root   10 Ноя 10 04:04 ata-WDC_WD1500HLFS-01G6U1_WD-WXC0CA9S7468-part2 -> ../../sda2
lrwxrwxrwx 1 root root    9 Ноя 10 04:04 ata-WDC_WD15EARS-00S8B1_WD-WCAVY3586255 -> ../../sdi
lrwxrwxrwx 1 root root   10 Ноя 10 04:04 ata-WDC_WD15EARS-00S8B1_WD-WCAVY3586255-part1 -> ../../sdi1
lrwxrwxrwx 1 root root    9 Ноя 10 04:04 ata-WDC_WD2003FYYS-02W0B1_WD-WCAY00134250 -> ../../sdb
lrwxrwxrwx 1 root root   10 Ноя 10 04:04 ata-WDC_WD2003FYYS-02W0B1_WD-WCAY00134250-part1 -> ../../sdb1
lrwxrwxrwx 1 root root    9 Ноя 10 04:04 ata-WDC_WD20EARS-00MVWB0_WD-WMAZ20249517 -> ../../sdc
lrwxrwxrwx 1 root root   10 Ноя 10 04:04 ata-WDC_WD20EARS-00MVWB0_WD-WMAZ20249517-part1 -> ../../sdc1
lrwxrwxrwx 1 root root 9 нояб. 16 00:21 usb-Generic-_Compact_Flash_20060413092100000-0:0 -> ../../sdf
lrwxrwxrwx 1 root root 9 нояб. 16 00:21 usb-Generic-_MS_MS-Pro_20060413092100000-0:3 -> ../../sdi
lrwxrwxrwx 1 root root 9 нояб. 16 00:21 usb-Generic-_SD_MMC_20060413092100000-0:2 -> ../../sdh
lrwxrwxrwx 1 root root 9 нояб. 16 00:21 usb-Generic-_SM_xD-Picture_20060413092100000-0:1 -> ../../sdg
Ага, спасибо.
Я для себя тупо делал проверку папки DCIM в корне флешки, и не важно, что и куда оно вставлено. Если есть такая папка (вроде по стандарту для цифровых камер положено), то значит можно копировать.
Я тут ещё про телефон думал, а он у меня кладёт в mobile/picture.
Чо-то как-то название статьи не соответствует содержимому… скрипт на bash — разве не набор команд командной строки?
Не совсем. Скрипт — это скрипт! А насчет «удобных средств» я своей жене сделал на bash-е «скриптовое средство» от которого она в полном восторге: есть папка на рабочем столе и есть рядом скрипт автоматического ужимания фоток: 1) закидывает она в папку любые фотки 2) кликает на скрипт 3) через несколько секунд/минут можно юзать «готовые для web» фотки.

Делюсь:
#!/bin/sh
#make_small.sh
#########
cd /home/valya/Desktop/fotoz_2_small || exit 1
mkdir -p 800x600
for f in *.[Jj][pP][gG] *.[gG][iI][fF] *.[pP][nN][gG] ; do
  if [ ! -f "800x600/${f}" ] ; then
    convert "${f}" -resize 800x800 "800x600/${f}"
  fi
done


NB: /home/valya/Desktop/fotoz_2_small замените на свой путь к папке, само собой!
А если бы вы слышали про inotify, то даже кликать не приходилось бы :)
В прошлогодней статье предлагалось каждый раз пользоваться командной строкой, а тут один раз написал и забыл.
А через год забыл, что писал, как писал, и как оно вообще работает. А оно всё работает!
Вот так линукс расслабляет :)
Собственно, так оно и происходит. Решил какую-то проблему и забыл до следующего глобального обновления (кто ж знал что за полтора месяца атрибуты карт-ридера поменяются в корне).
1. нотификация —
$ export DISPLAY=:0.0
$ mv /from/file /to/file && notify-send 'Move succeed' || notify-send 'Move failed'

не уверен, но в KDE наверное можно использовать kdialog

2. создать файл myapp.cfg с содержимым — key=«value»

$ source myapp.cfg
$ echo key
value


3. очень странно, не видел никаких ограничений на врем выполнения скрипта udev'ом, скорей всего скрипт на чем то спотыкается и не может завершиться, попробуйте в начале скрипта поставить set -x и ход выполнения сбросить в лог RUN+="/root/bin/PhotoSort.sh %k >> /tmp/PhotoSort.log"

4. я организовал определение флэшки через UUID ее раздела, определить можно через blkid, и если это наша флешка, то что-то делаем с ней

5. использовать UUID

6.…

7. зачем?
1. Нотификации я добился. notify-send, наверно, в KDE не работает совсем. А xmessage и kdialog работают. Теперь другая напасть: скрипт ожидает ответа от kdialog.
Судя по инструкции (шикарная, кстати) данная команда должна была отобразить в области уведомлений окно и через 10 секунд скрыться. Так оно и происходит, если запускать от своего имени (почти так, первое сообщение не показывается, только раздражает иконку информации, а на второй раз — открывает окошко, поэтому там два сообщения: старое и новое), но как только запускаешь от root'а как я выше привёл, то окно совершенно другого вида посередь экрана (верхнее окно) и скрипт останавливается и ждёт пока не кликнешь в это окошко или таймер не закончится:


2. Спасибо, как-нить займусь этим.

3. А вот не работает. Как я понял перенаправлять надо stderr, а значит надо было писать RUN+="/root/bin/PhotoSort.sh %k 2>> /tmp/file", но это всё равно не помогает — не пишет он ничего и даже файл не пытается создать. Как я понимаю, это из-за того, что скрипт получает такую строку: sdh1 2>> /tmp/file и перенаправления потоков не происходит.
Зато пока я экспериментировал с kdialog я проверил что выполняется он точно 60 секунд (выставив таймер на 70 секунд), а потом управление захватывает KDE. Я поставил echo «kdialog» >> /tmp/file сразу после вызова этого kdialog и ничего не получил в этом файле. Т.е. после того, как прошло 70 секунд и управление должно было вернуться в скрипт, там нас никто не ждал.

4. Про UUID спасибо, что-то мысль такая мелькнула, но не задержалась в голове. Это не избавляет нас от лишних движений по регистрации карты памяти (ну или в моём случае — создание файла в корне).

7. Из-за этого и появился файл в корне флешки, как индикатор того, что надо что-то делать. А так жмёшь кнопу, вставляешь флешку и она копируется, не жмёшь — не копируется. У меня тут раздвоение личности: хочется и с произвольной флешки скопировать, а с другой стороны — оно мне надо с произвольной-то?
Чтоб скрипт не ждал — приставляем &:
notify-send 'Move failed' &
Зашибись. Осталось только чтоб он в Системные уведомления это слал.
Опять же, возможно существует более элегантное решение.

Вы правы, существует. Воспользуйтесь exiv2.
Она позволяет простенько считывать, редактировать, удалять и пр. действия с мета-информацией exif.
В том числе у неё есть команда rename, которая переменовывает файлы, основываясь на Exif.Photo.DateTimeOriginal или (при отсутствии) — на Exif.Image.DateTime в соответствии с форматом, который вы укажите в ключе '-r' (который аналогичен стандартному формату strftime). По умолчанию формат %Y%m%d_%H%M%S, что меня вполне устраивает, так что ключём даже не пользуюсь.
Итак, шелл-функция из моей библиотеки скриптов для переименовывания файлов на основе их exif данных такая:
# sort photos by exif date
# $* - filenames to rename
# example: exif_date_sort ./* # sort all files in directory
# author: japdoll, 2008
exif_date_sort()
{
  until [ -z "$1" ]
  do
    exiv2 rename -- "./$1"
    shift
  done
  return 0
}
Sign up to leave a comment.

Articles