Записи отмеченные тегом 'фрибсд'

Автоматическая сортировка фильмов по папкам на файловом сервере с помощью bash

Как я уже когда-то, по-моему, писал, построил я себе файловый сервер на ФриБСД (FreeBSD). И так уж получилось, что скопилось на нём большое количество фильмов. Причём, не просто скопилось, а на разных жестких дисках (коих в моём сервере 4) в разных папках, и фильмы оказывались в тех или иных папках без каких бы то ни было причин. Просто оказывались и все.

Как нетрудно понять, в какой-то момент стало невозможно что-либо найти в таком беспорядке. И было принято решение: создать одну папку, назвать ее Films. В ней создать 27 папок: “0-9″, “a”, “b”, “c”, думаю, дальше вы догадались. А дальше был написан хитрый скрипт, который брал фильмы и клал их в какую-либо из вышеуказанных папок в зависимости от того, на какую букву начиналось название фильма.

Но прежде чем показать сам скрипт, скажу вот еще что: дело в том, что я сижу на Макоси (Mac OS X). А в Макоси есть такая замечательная штука, как изменение “подложки” под названием файла. Цвет этой подложки можно выбрать из 7 предустановленных цветов, либо убрать вообще. Для того, чтобы Файндер (Finder) знал, какого цвета подложку показывать под названием файла, создается еще один файл, в котором хранится значение этого цвета. А чтобы знать, в каком файле хранится цвет подложки для какого файла, называются они одинаково, с той лишь разницей, что у “подложечного” название начинается с “._”.

Так вот, я люблю отмечать фильмы, которые мне понравились, зеленым цветом, фильмы средней поршивости – желтым, совсем плохие я удаляю, а несмотренные отмечаю фиолетовым. И мне очень хотелось при переносе файлов все эти цвета сохранить. Итак, сам скрипт. Давно уже пора.

#!/bin/bash
echo “+————————————————————————+”
ls -a | while read filename; do
if [[ $filename == [0-9]* || $filename == ._[0-9]* ]]
then
echo “.”
mv “$filename” /usr/home/dtv/1.5tb/Films/0-9/
fi
done
declare -a allletters
i=0
for l in {a..z}; do
allletters["$i"]=”$l”
let “i+=1″
done
for l in {A..Z}; do
allletters["$i"]=”$l”
let “i+=1″
done
for j in {0..51}; do
letter=${allletters["$j"]}
echo “____________________________________________”
echo “$letter”
ls -a | while read fn; do
if [[ $fn == "$letter"* || $fn == ._"$letter"* ]]
then
o=$(($j-0))
if [[ "$j" -gt 25 ]]
then
o=$(($j-26))
fi
echo Moving “$fn” to  /usr/home/dtv/1.5tb/Films/${allletters["$o"]}
mv “$fn” /usr/home/dtv/1.5tb/Films/${allletters["$o"]}
fi
done
done
echo DONE!!!

Если у вас есть вопросы по тому, как он работает, задавайте. Обратите внимание, что путь “/usr/home/dtv/1.5tb/” вы должны заменить на тот, который соответствует вашей файловой структуре! Данный скрипт работает под FreeBSD, должен работать под Макосью (Mac OS X), возможно будет работать и под Линуксом. Данный файл нужно сохранить с каким-нибудь названием, начинающимся с нижнего подчеркивания, скажем “_sort.sh”, положить в папку с несортированными файлами и запустить из командной строки: “./_sort.sh”.

Данный блог, кстати говоря, заменил все кавычки на “кавычки-елочки” и открывающие и закрывающие кавычки. Их тоже необходимо заменить на обычные. Иначе ничего работать не будет.

Удачи!

locate во freebsd говорит: «database too small»

Итак, друзья мои, построил я домашний сервер и установил на него фрибсд. Во фрибсд есть замечательная программа для поиска файлов, называется она «locate». Работает она просто: ты пишешь locate somefile, и тут же получаешь список мест, где лежит файл с таким названием. А «тут же» достигается за счёт того, что программа ищет не по диску, а по базе данных, которую она (точнее, другая программка, с нею связанная) построила. Обычно эта база данных обновляется раз в неделю. Но мне в процессе настройки системы не хотелось ждать целую неделю, пока эта база построится. И вот что я выяснил:

Продать или купить iMac, MacBook и прочую продукцию Эппл: www.buy-a-mac.ru

Читать дальше ‘locate во freebsd говорит: «database too small»’



Follow

Get every new post delivered to your Inbox.