Как я уже когда-то, по-моему, писал, построил я себе файловый сервер на ФриБСД (FreeBSD). И так уж получилось, что скопилось на нём большое количество фильмов. Причём, не просто скопилось, а на разных жестких дисках (коих в моём сервере 4) в разных папках, и фильмы оказывались в тех или иных папках без каких бы то ни было причин. Просто оказывались и все.
Как нетрудно понять, в какой-то момент стало невозможно что-либо найти в таком беспорядке. И было принято решение: создать одну папку, назвать ее Films. В ней создать 27 папок: “0-9″, “a”, “b”, “c”, думаю, дальше вы догадались. А дальше был написан хитрый скрипт, который брал фильмы и клал их в какую-либо из вышеуказанных папок в зависимости от того, на какую букву начиналось название фильма.
Но прежде чем показать сам скрипт, скажу вот еще что: дело в том, что я сижу на Макоси (Mac OS X). А в Макоси есть такая замечательная штука, как изменение “подложки” под названием файла. Цвет этой подложки можно выбрать из 7 предустановленных цветов, либо убрать вообще. Для того, чтобы Файндер (Finder) знал, какого цвета подложку показывать под названием файла, создается еще один файл, в котором хранится значение этого цвета. А чтобы знать, в каком файле хранится цвет подложки для какого файла, называются они одинаково, с той лишь разницей, что у “подложечного” название начинается с “._”.
Так вот, я люблю отмечать фильмы, которые мне понравились, зеленым цветом, фильмы средней поршивости – желтым, совсем плохие я удаляю, а несмотренные отмечаю фиолетовым. И мне очень хотелось при переносе файлов все эти цвета сохранить. Итак, сам скрипт. Давно уже пора.
#!/bin/bashecho “+————————————————————————+”ls -a | while read filename; doif [[ $filename == [0-9]* || $filename == ._[0-9]* ]]thenecho “.”mv “$filename” /usr/home/dtv/1.5tb/Films/0-9/fidonedeclare -a alllettersi=0for l in {a..z}; doallletters["$i"]=”$l”let “i+=1″donefor l in {A..Z}; doallletters["$i"]=”$l”let “i+=1″donefor j in {0..51}; doletter=${allletters["$j"]}echo “____________________________________________”echo “$letter”ls -a | while read fn; doif [[ $fn == "$letter"* || $fn == ._"$letter"* ]]theno=$(($j-0))if [[ "$j" -gt 25 ]]theno=$(($j-26))fiecho Moving “$fn” to /usr/home/dtv/1.5tb/Films/${allletters["$o"]}mv “$fn” /usr/home/dtv/1.5tb/Films/${allletters["$o"]}fidonedoneecho DONE!!!
Если у вас есть вопросы по тому, как он работает, задавайте. Обратите внимание, что путь “/usr/home/dtv/1.5tb/” вы должны заменить на тот, который соответствует вашей файловой структуре! Данный скрипт работает под FreeBSD, должен работать под Макосью (Mac OS X), возможно будет работать и под Линуксом. Данный файл нужно сохранить с каким-нибудь названием, начинающимся с нижнего подчеркивания, скажем “_sort.sh”, положить в папку с несортированными файлами и запустить из командной строки: “./_sort.sh”.
Данный блог, кстати говоря, заменил все кавычки на “кавычки-елочки” и открывающие и закрывающие кавычки. Их тоже необходимо заменить на обычные. Иначе ничего работать не будет.
Удачи!
