好吧,当您尝试更改某些内容的图标时,一些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