Cóż, niektóre DE pokazują to, gdy próbujesz zmienić ikonę czegoś, ale dość łatwo jest to zrobić samodzielnie. Wystarczy znaleźć wszystkie ikony, utworzyć łącza do nich w jakimś katalogu i przeglądać katalog. Ikony o różnych rozdzielczościach będą miały tę samą nazwę, co zmienia ścieżkę. Na przykład:
$ 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
Jak widać powyżej, ogólny format to /ParentDir/ThemeName/CLass/Resolution/IconName
. Ponieważ nazwa ikony jest taka sama, możemy łatwo uniknąć duplikatów, tworząc każdy link zastępujący wszelkie istniejące łącza o tej samej nazwie. Chcemy jednak oddzielić ikony od różnych motywów osobno, więc wymaga to nieco więcej skryptów:
#!/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
Powyższy skrypt utworzy katalog, ~/foo
który będzie zawierał łącza do każdego z twoich unikalnych plików ikon. -f
Opcja ln
informuje go, aby zastąpić istniejące pliki o tej samej nazwie, a ponieważ używamy nazwy tematu w nazwie tego linku, nie powinno być żadnych duplikatów. Na przykład, biorąc pod uwagę powyższe emacs.png
ikony, utworzy:
hicolor_emacs.png -> /usr/share/icons/hicolor/48x48/apps/emacs.png
Mint-X_emacs.png -> /usr/share/icons/Mint-X/apps/22/emacs.png
Możesz teraz przeglądać ~/foo
i sprawdzać:
Następnie, aby uzyskać pakiety źródłowe, możesz uruchomić:
for i in ~/foo/*; do dpkg -S $(readlink -f "$i"); done