26.01.2010 14:04

DariaДекорируем Папки-Альбомы

После таково знатного поста о смене изображения папки решила добавить немного красоты в мою медиатеку. Вот накидала скрипт, который ищет в текущей или переданной папке картинки-обложки (что-нибудь вроде Cover.jpg) или просто случайные картинки, и лепит их на место стандартной иконки папки, к примеру папки-альбома.

Скрипт работает как в бэш, так и как скрипт для Nautilus. А вот и листинг:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/bash
#
# folderdecorater 0.3
#
# Скрипт заменяет иконку папки в Nautilus другой картинкой.
# Можно использовать как с аргументом PATH_TO_DIRECTORY для
# папки которую нужно украсить, так и без (что равносильно ./)
#

# немного цветов
RED='\e<1;31m'
GREEN='\e<1;32m'
BLUE='\e<1;34m'
NC='\e<0m'

# будем сначала искать те, в именах которых присутствуют следующие слова
FAVORITE_ICONS_NAME="folder|front|cover" # сюда можно добавить свои вещи

if (($# > 0)) # проверяем наличие аргументов
then
if < -d "$1" > # аргумент - директория?
then
if << $1 = /* >>; # абсолютный путь? т.е. начинается с / ?
then # да, абсолютный путь
FOLDER_NAME="{$1}"
else # делаем относительный путь абсолютным
FOLDER_NAME="${PWD}"/"${1}"
fi
else # аргумент не директория
echo -e "Bad news, Harry, Ron spelled Flagrate cause ${RED}your argument is wrong!${NC}"
exit 1
fi
else # аргументов нет,
FOLDER_NAME="${PWD}" # копаем в текущей директории
fi

FOUND_ICONS_LIST=$(mktemp)

# ищем картинки, сохраним в список $FOUND_ICONS_LIST, и запомним количество "улова"
COUNT=$(find "${FOLDER_NAME}" -iname "*.png" -o -name "*.jpg" -o -name "*.gif" | tee $FOUND_ICONS_LIST | wc -l)
if (($COUNT))
then
# возможно есть изображение с частью имени файла как в $FAVORITE_ICONS_NAME?
ICON_FILE=$( while read ; do basename "${REPLY}" | grep -m 1 -i -E "($FAVORITE_ICONS_NAME)" > /dev/null && echo "${REPLY}"; done < $FOUND_ICONS_LIST | head -n 1)
# если нет,
if < -z "$ICON_FILE" >
then
# то подойдёт случайное изображение
ICON_FILE=$(cat $FOUND_ICONS_LIST | awk NR==$((($RANDOM % $COUNT)+1)) )
fi
convert "$ICON_FILE" -thumbnail 300x300! "$FOLDER_NAME"/.folder.png
FOLDER_IMAGE=file://"$FOLDER_NAME"/.folder.png

# не забудем о дельфине
echo -e "<desktop entry="Entry">\nIcon=./.folder.png" > "$FOLDER_NAME"/.directory
# колдовство для гнома
gvfs-set-attribute -t string "$FOLDER_NAME" metadata::custom-icon "$FOLDER_IMAGE"

# сообщим об исходе колдовства.
if (($?))
then
echo -e "Bad news, Harry, decorating ${RED}goes wrong!${NC}"
else
echo -e $BLUE"$FOLDER_NAME"$NC is decorated with $GREEN"$ICON_FILE"$NC
fi
# ни одной картинки? что-ж используем стандартную иконку папки
else
exit 1;
fi
exit 0
</desktop>



зы: Следующей забавой я думаю написать скрипт, который бы рекурсивно проходил всю медиатеку, искал папки-альбомы, то есть те, непосредственно в которых бы были аудиофайлы, и вызывать в этих папках приведённый в этом посте скрипт.

UPD: готово! вот код:

 1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
# обходчик 0.1
# рекурсивно проходит по рабочей директории и сабдиректориям в поиске
# flac и mp3 медиафайлов. в каждую директорию с медиафайлами "декорирует".

find . -type d | while read
do if (( $(find "$REPLY" -maxdepth 1 -iname "*.flac" -type f -o -iname "*.mp3" -type f | wc -l) ))
then
decoratefolder "${REPLY}"
fi
done




зы3: Работает и для Dolphin/KDE, так что в Amarok наведена красота.

зы4: Помогите с дефолтным значком для папки, по умолчанию он называется просто folder. Через скрипт я устанавливаю его если в субдиректориях не были найдены картинки. Однако, вместо значка папки по умолчанию появляется значок файла по умолчанию. В чём дело?

UPD: пока в случае отсутствия изображений в директории, просто ничего не делаю.


Тэги: images nautilus script
+ 7 -
Похожие Поделиться

digiwhite 26.01.2010 14:26 #
find $FOLDER -type f -name "folder.jpg" -o -name "cover.jpg" - exec ...

Например так :)

ЗЫ: толком не глядел скрипт, т.к. с КПК смотриться криво.

ЗЗЫ: была такая идея. Думаю, что еще можно запихать скрипт в крон, и пусть он там пару раз в сутки (или с нужной переодичностью) запускает скрипт. Т.о. создаем альбомы, кидаем в них обложку и через некоторое время они обновляются :)
digiwhite 26.01.2010 14:30 #
Ступил :) Используйте утилиту basename для получения короткого(без пути) имени файла, которое за тем можно grepнуть.
guineapig 26.01.2010 14:53 #
Интересно доработать ваш скрипт так чтобы он составлял коллажик того что находиться в папке... Мило бы выглядело.
Username 26.01.2010 15:18 #
девушки, пишущие скрипты вызывают во мне религиозный ужас и трепет
Shtsh 26.01.2010 15:20 #
Угу, таких нужно любить и не отпускать. И поклоняться им :)
Username 26.01.2010 15:25 #
а, ну и кстати Dolphin и coolface.jpg :)
Daria 26.01.2010 18:12 #
допилю быстренько версию для дельфина, ибо это легко, ну и кулфейс тоже придётся придумать :)
Username 26.01.2010 19:24 #
тык он умеет. Вроде...
Daria 27.01.2010 00:27 #
ну теперь скрипт умеет, кулфейс ещё не прикрутила :)
Aesdana 26.01.2010 18:10 #
Я со воим pcmanfm о таких вещах даже не заморачиваюсь )
digiwhite 26.01.2010 19:04 #
А чем этот файл-манагер так хорош?
Aesdana 26.01.2010 19:51 #
Попроще будет. А обложки альбомов я наблюдаю вот так:
Image downloaded service ITmages
ZogG 26.01.2010 20:35 #
как всегда, твои скрины превосходны. Аесдана, роди мне ребенка
Daria 26.01.2010 22:15 #
расскажи, что у тебя тут, и как оно всё работает?
ZogG 26.01.2010 22:27 #
я думаю она коньки настроила так
Aesdana 26.01.2010 22:30 #
Коньки, конфиг - солянка из старых запасов и найденное на девиантарте. Обоина, оттуда же. Pekwm, bmpanel, sonata, pcmanfm, gajim, deluge, sakura (хотя обычно использую tilda). Темы панели и гтк - заимствованные и передланные )
ZogG 26.01.2010 20:35 #
соглашусь с Аесданой. альбома обложку надо только при проигрывание смотреть. так как по папкам мало кто лазиет, для этого давно же есть медиатека(медиа библиотека, или как там она у вас в плеере называется) - один раз добавил и не лазиешь туда больше.у меня ооооооочень много музыки, представляю как я залезу в папку с музыкой и у меня скрипт попробует пару сотню папок поменять в картинки, вот это будет жесть.
Aineko 12.02.2010 18:11 #
а как же, то что было в .directory затирается? недочет.
Daria 13.02.2010 10:09 #
да, верно. quick'n'dirty решение, но меня для фонотеки устраивало. может быть перепишу, пока же не знаю ещё.