Блог - Linux, программирование, Я!

Программированиеbash скриптик

Вот поразвлекался ночью...
Нужно было составить список фильмов на файлсервере и преобразовать его в список ссылок (BB кодов)
Ну, список получить не сложно оказалось, просто подмонтировал smbfilesystem к своей системе и сделал там ls
С преобразованием в ссылки оказалось сложнее т.к. имена файлов были как на английском, так и на русском так что нужно было преобразовать их в URL формат (т.е. что-то вроде %D4%E8%EB%FC%EC%FB%20%F1 )
Нарыл на эту тему описание схемы кодирования:
http://ru.wikipedia.org/
сам, как можно догадаться, его реализовать не смог, поэтому пришлось заюзать сервис Ответы Google там довольно быстро подсказали решение и в результате бессонной ночи и изучения мануалов по sed и awk получилось вот это чудо:

[codesyntax lang="bash"]#!/bin/sh

sudo mount -t smbfs -o iocharset=utf8,codepage=cp866,username=guest,password= //172.16.15.15/video /media/grom_films #Монтируем smb папку

jopa0=$(ls "/media/grom_films/Films" ) #Читаем содержимое папки, можно сделать с параметром -R для рекурсивного чтения
jopa1=$(perl -e "use URI::Escape;print(uri_escape(\"$jopa0\"));" | awk 'BEGIN {RS="%0A"} {print ($0)}') #Преобразуем список в URL формат для исключения проблем c пробелами и кирилицей

films1=$(echo "$jopa0\n$jopa1" |awk '{sum[NR] = $0} END {limit = NR / 2 +1; for(k=1; k < limit; ++k) {print ("[url=ftp://172.16.15.15/Films/"sum[k+limit-1]"]"sum[k]"[/url]")} }') #Хитрым способом обрамляем ссылки тегами или BB кодами

#Повторяем для 2-й папки сервера
jopa0=$(ls "/media/grom_films/Films 2")
jopa1=$(perl -e "use URI::Escape;print(uri_escape(\"$jopa0\"));" | awk 'BEGIN {RS="%0A"} {print ($0)}')

films2=$(echo "$jopa0\n$jopa1" |awk '{sum[NR] = $0} END {limit = NR / 2 +1; for(k=1; k < limit; ++k) {print ("[url=ftp://172.16.15.15/Films 2/"sum[k+limit-1]"]"sum[k]"[/url]")} }')

echo "-------------Папка Films--------------\n $films1 \n \n----------Папка Films 2--------------\n $films2" > ~/gromlink.txt #объединяем все выводы и печатаем в файл
Результат примерно так выглядит:

[url=ftp://172.16.15.15/Films/21%20%D0%B3%D1%80%D0%B0%D0%BC%D0%BC.avi]21 грамм.avi[/url]
[url=ftp://172.16.15.15/Films/7%20%D0%BC%D1%83%D0%BC%D0%B8%D0%B9%20(2005)]7 мумий (2005)[/url]
[url=ftp://172.16.15.15/Films/8%20%D0%B6%D0%B5%D0%BD%D1%89%D0%B8%D0%BD.avi]8 женщин.avi[/url]

[url=ftp://172.16.15.15/Films/Angel_A.avi]Angel_A.avi[/url][/codesyntax]

............

Ну, естественно, если шаблон обрамления поменять на, скажем, "<a href=`ftp://172.16.15.15/Films/"sum[k+limit-1]"`>"sum[k]"</a>" то получим обычныую HTML ссылку.