Я хочу посмотреть, какие значки установлены и доступны в моей системе и по каким именам я должен ссылаться на них.
Как я могу получить красиво отформатированный список всех уникальных значков (не показывать несколько разрешений отдельно), который содержит имя значка, миниатюру предварительного просмотра, местоположение и, возможно, по возможности, откуда он появился (например, который представляет собой тематический пакет)?
Система: Ubuntu 15.10 Wily Werewolf 64 бит Desktop: Unity
Ну, некоторые DEs показывают это, когда вы пытаетесь изменить значок чего-то, но это очень легко сделать самому. Просто найдите все значки, сделайте ссылки на них в каком-то каталоге и просмотрите каталог. Значки с разными разрешениями будут иметь одно и то же имя, какие изменения являются путями. Например:
$ find /usr/share/icons/ -name '*emacs.*'
/usr/share/icons/hicolor/16x16/apps/emacs.png
/usr/share/icons/hicolor/48x48/apps/emacs.png
/usr/share/icons/hicolor/scalable/apps/emacs.svg
/usr/share/icons/hicolor/128x128/apps/emacs.png
/usr/share/icons/hicolor/32x32/apps/emacs.png
/usr/share/icons/hicolor/24x24/apps/emacs.png
/usr/share/icons/Mint-X/apps/96/emacs.svg
/usr/share/icons/Mint-X/apps/16/emacs.png
/usr/share/icons/Mint-X/apps/24/emacs.png
/usr/share/icons/Mint-X/apps/48/emacs.png
/usr/share/icons/Mint-X/apps/32/emacs.png
/usr/share/icons/Mint-X/apps/22/emacs.png
Как вы можете видеть выше, общий формат /ParentDir/ThemeName/CLass/Resolution/IconName. Итак, поскольку имя иконы совпадает с тем, мы можем легко избежать дубликатов, создав каждую созданную ссылку, переписывая любые существующие ссылки с тем же именем. Тем не менее, мы хотим, чтобы джип значков из разных тем разделялся, поэтому требуется немного больше скриптов:
#!/usr/bin/env bash
## Create the target directory
mkdir -p ~/foo
## Iterate over all files/dirs in the target locations
for i in ~/.icons/* /usr/share/icons/* /usr/share/pixmaps/*; do
## find all icon files in this directory. If the current $i
## is not a directory, find will just print its path directly.
find "$i" -name '*xpm' -o -name '*.svg' -o -name '*png' |
## Iterate over find's results
while read ico; do
## Make the link. ${var##*/} will print the
## basename of $var, without the path. Here, I use
## it both to get the theme name (${i##*/}) and the
## icon's name (${ico##*/}).
ln -sf "$ico" "${i##*/}"_"${ico##*/}"
done
done
В приведенном выше скрипте будет создан каталог ~/foo, который будет содержать ссылки на каждый ваших уникальных файлов значков. Опция -f в ln сообщает, что она перезаписывает существующие файлы с тем же именем, и поскольку мы используем имя темы в названии ссылки, дубликатов не должно быть. Например, с учетом значков emacs.png, показанных выше, он создаст:
hicolor_emacs.png -> /usr/share/icons/hicolor/48x48/apps/emacs.png
Mint-X_emacs.png -> /usr/share/icons/Mint-X/apps/22/emacs.png
Теперь вы можете перейти к ~/foo и посмотреть:
[!d4 ]
Затем, чтобы получить исходные пакеты, вы можете запустить:
for i in ~/foo/*; do dpkg -S $(readlink -f "$i"); done