まあ、一部のDEは、何かのアイコンを変更しようとするとこれを表示しますが、自分でそれを行うのは非常に簡単です。すべてのアイコンを見つけて、いくつかのディレクトリでそれらへのリンクを作成し、ディレクトリを参照します。解像度の異なるアイコンには同じ名前が付けられますが、変更されるのはパスです。例えば:
$ 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
て確認できます。
次に、ソースパッケージを取得するために、次を実行できます。
for i in ~/foo/*; do dpkg -S $(readlink -f "$i"); done