Как стать автором
Поиск
Написать публикацию
Обновить

Упорядочиваем диски скриптом весом меньше килобайта

Время на прочтение5 мин
Количество просмотров1.1K
Пока грипповирус подкашивает наши ряды (я уже выбыл из строя), страна празднует (у кого-нибудь стол таки был?) непонятные праздники, а Россия вот вот нападёт на Польшу (аааа), самое время упорядочить нашу коллекцию болванок %).
Итак, возьмём в руки всю силу cat'а, grep'а, sed'а и bash'а и напишем маленький но очень полезный скриптик.


Вводное слово



У вас наверняка много-много болванок. Я вот их использую, для того чтобы сливать на них всё то добро, что накапливается на диске: от любимых мной Симпсонов и прослушанных подкастов до просто отвратного рэпа «репера Сявы», просто потому что мне жаль потраченного трафика и я хочу чтобы потраченные на него деньги имели материальное воплощение в виде заполненных секторов на dvd-диске.
Но бывает найти что-либо среди сотен дисков очень сложно, потому на помощь приходят «каталогизаторы». Долгое время я смотрел на экземляры существующих особей, но в конце концов понял — НЕ ТО! Мне нужно простое средство: одна команда на добавление диска, другая на поиск. Мне не нужен gui, ибо вполне может случиться такая ситуация, когда гуя под рукой не будет (хе), а диск нужно таки найти: не хочу включать бук, вставляю флешку с базой в роутер, захожу по ssh на него и нахожу нужный диск и отдаю его знакомому, а если флеха будет уже расшарена, то вообще отлично.

Прелюдия закончена, теперь немного кода.
Я приведу сюда весь набранный мною скрипт — он прост до абсурда, а после этого объясню важные моменты его работы.

#!/bin/bash
#special for habra-users from [r-k] (rapkasta on habrahabr.ru)
dbDir="/home/rap-kasta/Documents/cdvdm-article/db/"

if [ $# -lt 1 ]; then
echo "Требуется указать хотя бы действие..."
exit 1
fi

case "$1" in
"add" )
echo "Добавление диска"
if [ $# -ne 3 ]; then
echo "Неверное количество параметров"
fi

find $2 > "${dbDir}${3}"

;;

"find" )
echo "Поиск файла на диске"
if [ $# -ne 2 ]; then
echo "Неверное количество параметров"
fi
grep -H -i -P "${2}" ${dbDir}*|sed "s|${dbDir}||"
;;

"help" )
echo "Справка. Возможны следующие запросы:"
echo "1)Добавление диска: add ПУТЬ_ДО_ДИСКА ИМЯ_ДИСКА"
echo "2)Поиск диска(файла): find ШАБЛОН_ПОИСКА"
;;
* )
echo "Неизвестное действие $1"
;;
esac


Итак, пройдёмся по пунктам.

Как у нас будет выглядеть база дисков



Всё очень просто: база-это отдельная директория, которая указывается в начале скрипта, файлы внутри директории — диски, чьи имена соответствуют именам дисков, а содержимое файлов — файловое дерево диска.
Таким образом, у нас есть возможность удалять и «править» диски ручками, хотя если вам сильно захочется — можете добавить функции удаления и правки прямо в скрипт: сделать rm или запрос к любимому текстовому редактору так же легко как сделать добавление файлов.

Добавление файлов



Воспользуемся великой и могучей программой find, которая, если не указывать ничего лишнего, с удовольствием отдаст нам все файлы внутри директории:

find ОТКУДА_БРАТЬ_ФАЙЛОВУЮ_СТРУКТУРУ > КУДА_ЕЁ_ЗАПИСАТЬ


Как мы уже выяснили, имя файла в базе дисков — это имя диска. Следуя здравой логике, имя диска не должно содержать ничего противозаконного (слэш и — в силу субъективных обстоятельств — прямую черту ("|") ) и должно быть уникальным для диска. Если же у вас много диском с названием «Немецкая Классика», то можно собрать все эти диски в стопку и добавить фломастером к имени каждого порядковый номер: «Немецкая Классика #67».

После добалвения диска, он складывается в стопочку/забрасывается далеко-далеко и через пару месяцев внезапно в нём возникает надобность. Правда уже забыли в каком «в нём».

Поиск файлов



Предположим вы, как и я, цените творчество Гроенинга и внезапно захотели пересмотреть весь 18й сезон его Смешариков. Для этого нам понадобится mplayer, но сначала таки найдём куда мы закинули этих самых круглых монстров, а поможет нам в этом команда find:

find -H -i -P Перловая_Регулярка ГДЕ_ИЩЕМ


Для того чтобы использовать регулярные выражения, мы добавляем -P к запросу find, а -H выведет нам имя файла в котором была найдена нужная подстрока, -i сделает запрос нечувствительным к регистру.
Есть минус: в выводе find покажет полный путь к найденным файлам, потому нам нужно убрать постоянно повторяющийся путь до базы, в чём нам поможет любимый всеми текстовый редактор SED:

echo "Что-то"|sed 's/то/меняем на сё/'


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

Ах да, смешарики...
[rap-kasta@acerAspire cdvdm-article]$ ./cdvdm.sh find 'Simpsons(.+)18(x|e)(.+)\.(avi|srt)'
Поиск файла на диске
Archive #10:/media/cdrom/Simpsons/The Simpsons [18x07] Ice Cream Of Margie With The Light Blue.avi
Archive #10:/media/cdrom/Simpsons/The Simpsons [18x08] The Haw-Hawed Couple.avi
Archive #10:/media/cdrom/Simpsons/The Simpsons [18x09] Kill Gil - Vols. 1 And 2.avi
Archive #10:/media/cdrom/Simpsons/The Simpsons [18x10] The Wife Aquatic.avi
Archive #10:/media/cdrom/Simpsons/The Simpsons [18x11] Revenge Is A Dish Best Served Three Tim.avi
Archive #10:/media/cdrom/Simpsons/The Simpsons [18x12] Little Big Girl.avi
Archive #10:/media/cdrom/Simpsons/The Simpsons [18x13] Springfield Up.avi
Archive #10:/media/cdrom/Simpsons/The Simpsons [18x14] Yokel Chords.avi
Archive #10:/media/cdrom/Simpsons/s18e07.srt
Archive #10:/media/cdrom/Simpsons/s18e08.srt
Archive #10:/media/cdrom/Simpsons/s18e09.srt
Archive #10:/media/cdrom/Simpsons/s18e10.srt
Archive #10:/media/cdrom/Simpsons/s18e11.srt
Archive #10:/media/cdrom/Simpsons/s18e12.srt
Archive #10:/media/cdrom/Simpsons/s18e13.srt
Archive #10:/media/cdrom/Simpsons/s18e14.srt
Archive #9:/media/cdrom/Simpsons/s18e06.srt
Archive #9:/media/cdrom/Simpsons/s18e05.srt
Archive #9:/media/cdrom/Simpsons/s18e04.srt
Archive #9:/media/cdrom/Simpsons/s18e03.srt
Archive #9:/media/cdrom/Simpsons/s18e02.srt
Archive #9:/media/cdrom/Simpsons/s18e01.srt
Archive #9:/media/cdrom/Simpsons/The Simpsons [18x06] Moe 'N' A Lisa.avi
Archive #9:/media/cdrom/Simpsons/The Simpsons [18x05] G.I. (Annoyed Grunt).avi
Archive #9:/media/cdrom/Simpsons/The Simpsons [18x04] Treehouse Of Horror XVII.avi
Archive #9:/media/cdrom/Simpsons/The Simpsons [18x03] Please Homer, Don't Hammer 'Em.avi
Archive #9:/media/cdrom/Simpsons/The Simpsons [18x02] Jazzy And The Pussycats.avi
Archive #9:/media/cdrom/Simpsons/The Simpsons [18x01] The Mook, the Chef, the Wife, and Her H.avi


Ин конлюжн


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

P.S. Хабрапользователем ystein в комментарии была предложена отличная идея и реализация (для Windows) хранения дампа дисков, которая переносит такие функции как поиск на уже существующие файл-менеджеры.

P.P.S. Минусующие, отписывайтесь в хабрапочту или в комменты о причинах :)
Теги:
Хабы:
Всего голосов 17: ↑10 и ↓7+3
Комментарии9

Публикации

Ближайшие события