Идея каталогера, который бы сохранял на диске содержимое моей библиотеки (медиатеки? информатеки? дискохранилища?) dvd не отпускала меня с тех самых пор, как я перебрался на убунту. Конечно, Cathy прекрасно работала под wine-ом, и вполне справлялась с теми задачами, которые на нее были возложены еще в старой системе. Некоторое время у меня крутилась в голове идея обобщенного скрипта на Питоне, однако в конце-концов на Хабре появился пост, который расставил все по своим местам. Главной оказалась идея о том, что файловую структуру диска без особых хлопот можно получить через find.

читать дальше в wordpress'e


11го марта я написал на базе того, что было описано на Хабре свой вариант скрипта. Главное отличие в том, что мне хотелось большего автоматизма. Свои диски при записи я как правило называю вполне внятными именами (чего по моим наблюдениям многие не делают), которые пишу маркером на дисках же. Т.е. диск с именем video20100327 будет подписан соответствующе и вполне однозначно привязан к системе обозначений (другое дело что кроме video20100327 на него можно дописать всякой пояснительной информации).

Вот что получилось в моем варианте:
#! /bin/bash

# получаем название диска и путь куда сохранить каталог
# в моем случае - это будет ~/hive/cat

A=$(isoinfo -i /dev/cdrom -d | grep "Volume id" | sed "s/^.*: //g") && \
h=$'/home/vik/hive/cat/' && \

# информируем пользователя о том что и куда пишем
echo $A
echo $h$A

# создаем файл-каталог текущего dvd
# туда складываем заголовок: название диска, дату создания
# и линейку-разделитель

touch $h$A.kat && \
echo 'disk: '$A > $h$A.kat
date +%Y-%m-%d' '%H:%M >> $h$A.kat
echo '=============================================================' >> $h$A.kat

# получаем содержимое диска, сортируем его по порядку,
# обрабатываем его sed'ом - убираем лишнюю информацию
# и лишний кусок пути после чего сливаем содержание в файл-каталог

find /media/cdrom0 | sort | \
sed -e '1d' -e 's=/media/cdrom0/==g' \
>> $h$A.kat && \

# извлекаем диск - очень удобно когда каталогизируется множество дисков
# если мешает - можно закомментировать.
eject

В принципе вот и все. Таким макаром подбираются файлы название которых соответствует названию диска, а содержимое - файловому дереву диска. Так же появилась (в отличие от Cathy) возможность разложить "файлы-диски" по "папкам-бандлам", где каждой папке соответствует реальный пластиковый футляр с дисками - сразу становится понятно где и что искать.

Каталогизация идет примитивно - на панель GNOME уже описанным методом вытащена кнопка. Диск вставляется. Я жду пока система смонтирует его, кликаю по кнопке, пауза... диск сам извлекается обратно. После чего файл перекладывается в нужную папку.

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

Искать можно, например, способом описанном в статье на хабре. Лично я просто пользуюсь grep'ом. Эта система очень хорошо описана в статье про греп и словари - кстати, очень рекомендую.

В приложении к дискам это может выглядеть например так. Мне хочется вспомнить где у меня лежат Карпатские фотографии 2008-го года.
vik@firefly:~/hive/cat$ grep -R 2008.*Карпаты *

(-R означает "искать рекурсивно во всех подкаталогах")

Получаем:
gifs20050403trave/FOTO20080620.kat:20080425 - 0503 - Поход в Карпаты
gifs20050403trave/FOTO20080620.kat:20080425 - 0503 - Поход в Карпаты/DSC08224.JPG
...
gifs20050403trave/FOTO20080620.kat:20080425 - 0503 - Поход в Карпаты/MOV08356.MPG
gifs20050403trave/FOTO20080620.kat:20080425 - 0503 - Поход в Карпаты/MOV08356.THM
gifs20050403trave/FOTO20080620.kat:20080425 - 0503 - Поход в Карпаты/Фото Антона
gifs20050403trave/FOTO20080620.kat:20080425 - 0503 - Поход в Карпаты/Фото Антона/DSC03273.JPG
...
gifs20050403trave/FOTO20080620.kat:20080425 - 0503 - Поход в Карпаты/Фото Антона/MOV03416.MPG
gifs20050403trave/FOTO20080620.kat:20080425 - 0503 - Поход в Карпаты/Фото Антона/MOV03416.THM
gifs20050403trave/TRAVE20080711.kat:accounts/20080426 Карпаты Абордажная Команда Boarding Party
gifs20050403trave/TRAVE20080711.kat:accounts/20080426 Карпаты Абордажная Команда Boarding Party/01.JPG
gifs20050403trave/TRAVE20080711.kat:accounts/20080426 Карпаты Абордажная Команда Boarding Party/02.JPG
gifs20050403trave/TRAVE20080711.kat:accounts/20080426 Карпаты Абордажная Команда Boarding Party/03.JPG
...
sper20060105_20081209/SPER20081208.kat:ferbot2/accounts/20080426 Карпаты Абордажная Команда Boarding Party
...

То есть фотографии (и отчеты, которые попутно нашлись) лежат в бандлах с наклейками "gifs20050403trave" и "sper20060105_20081209" соответственно и называются "FOTO20080620.kat", "TRAVE20080711.kat" и "SPER20081208.kat". Спером у меня называются бэкапы по давней традиции. Снимаем с полки нужные бандлы и достаем соответствующие диски.



Приятная особенность, которая выяснилась по ходу дела. Неделю назад я поставил себе MetaTracker - настольную поисковую систему, вроде GoogleDesktop сотоварищи. Когда понадобилось найти книгу - выяснилось, что он просканировал и мою библиотеку на дисках и искал название в том числе и по ней. В итоге я не покидая из трекера получил все координаты нужного мне источника - поскольку название файла и папка где он лежит прямо указывали на нужный dvd. Plain text традиционно рулит и педалит.



@темы: bash, рецепты, foss forever, инфотех, нот, научная организация труда, это просто работает, идеи, программизм, фичи