minoshi |
|
Темы:
39
Сообщения:
379
Участник с: 09 ноября 2009
|
Решил тут поупражняться в скриптах. Задача найти приложения для файла по его mime-типу. Другими словами взять тип файла, заглянуть в /etc/mime.types, где уточнить группу, затем в /usr/share/applications/mimeinfo.cache найти список .desktop-файлов. получилось немного топорно, но работает : [user@server эмблемы и флаги]$ (cat /usr/share/applications/mimeinfo.cache | grep '/'$(cat /etc/mime.types | grep $(file -i ./AS_symbol.bmp | cut -d':' -f2 | cut -d' ' -f2 | cut -d';' -f1) | cut -f5)'=') | cut -d'=' -f2 mtpaint.desktop;gimp.desktop;gpicview.desktop; [user@server эмблемы и флаги]$ Вопрос собственно вот в чем, меня смущает вот это выделенный участок команды: (cat /usr/share/applications/mimeinfo.cache | grep ‘/’$(cat /etc/mime.types | grep $(file -i ./AS_symbol.bmp | cut -d':' -f2 | cut -d' ‘ -f2 | cut -d’;' -f1) | cut -f5)'=') | cut -d'=' -f2 дело в том, что у меня в файле /etc/mimeinfo.cache колонки разделены ровно 4 символами tab image/x-ms-bmp bmp image/x-pcx pcx image/x-photoshop psd image/x-pict pct pic Однако, при редактировании /etc/mimeinfo.cache это расстояние может измениться (или использовали не tab-клавишу а пробел) и соответственно работа скрипта нарушится. Подскажите как усовершенствовать команду? Другие подходы к решению задачи - также приветствуются. |
void |
|
Темы:
32
Сообщения:
375
Участник с: 15 февраля 2010
|
xdg-mime query default $(file -b --mime-type "path/to/your/file/here") а для переменных разделителей можно использовать awk: ... | awk '{ FS=" |\t" ; print $2 }' |
minoshi |
|
Темы:
39
Сообщения:
379
Участник с: 09 ноября 2009
|
xdg-mime query default $(file -b --mime-type "path/to/your/file/here") [user@server Backgrounds]$ xdg-mime query default $(file -b --mime-type ./03cf181c82747cbde1c9ea38abcccede.jpg) gpicview.desktop [user@server Backgrounds]$ [user@server Backgrounds]$ cat /usr/share/applications/mimeinfo.cache | grep '/'$(cat /etc/mime.types | grep $(file -i ./03cf181c82747cbde1c9ea38abcccede.jpg | cut -d':' -f2 | cut -d' ' -f2 | cut -d';' -f1) | cut -f5 | cut -d' ' -f1) | cut -d'=' -f2 mtpaint.desktop;gimp.desktop;gpicview.desktop; [user@server Backgrounds]$ по awk не въехал, как его сюда прикрутить ? |
void |
|
Темы:
32
Сообщения:
375
Участник с: 15 февраля 2010
|
minoshi minoshi дефолт это дефолт, не может быть несколько дефолтных значений. minoshiпохоже, что никак. Я пробовал на другом примере, там сработало, здесь в однострочник awk похоже не подойдет, потому что ему нельзя задать диапозон полей для вывода. И вообще у меня там ошибка - задумывалось не FS=“ |\t”, а FS="+" |
minoshi |
|
Темы:
39
Сообщения:
379
Участник с: 09 ноября 2009
|
voidДействительно … поправил условие задачи в первом посте. Тем не менее задача пока не решена :( |
minoshi |
|
Темы:
39
Сообщения:
379
Участник с: 09 ноября 2009
|
Хотя нет, вот так вроде работает.[user@server Backgrounds]$ cat /usr/share/applications/mimeinfo.cache | grep $(xdg-mime query filetype ./03cf181c82747cbde1c9ea38abcccede.jpg | cut -d ';' -f1) | cut -d '=' -f2 mtpaint.desktop;gimp.desktop;gpicview.desktop; [user@server Backgrounds]$ Void, спасибо за идею |