Chà, một số DE thể hiện điều này khi bạn cố gắng thay đổi biểu tượng của một cái gì đó, nhưng nó khá dễ dàng để tự làm điều đó. Chỉ cần tìm tất cả các biểu tượng, tạo liên kết đến chúng trong một số thư mục và duyệt thư mục. Các biểu tượng của các độ phân giải khác nhau sẽ có cùng tên, những thay đổi là đường dẫn. Ví dụ:
$ 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
Như bạn có thể thấy ở trên, định dạng chung là /ParentDir/ThemeName/CLass/Resolution/IconName
. Vì vậy, vì tên của biểu tượng là giống nhau, chúng ta có thể tránh trùng lặp dễ dàng bằng cách tạo từng liên kết ghi đè lên bất kỳ liên kết hiện có cùng tên. Tuy nhiên, chúng tôi muốn tách riêng các biểu tượng từ các chủ đề khác nhau, do đó cần có thêm một chút kịch bản:
#!/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
Kịch bản trên sẽ tạo thư mục ~/foo
chứa các liên kết đến từng tệp biểu tượng duy nhất của bạn. Các -f
tùy chọn để ln
nói với nó để ghi đè lên file hiện có cùng tên và, vì chúng ta đang sử dụng tên chủ đề trong tên của liên kết, không nên có bản sao. Ví dụ, với các emacs.png
biểu tượng hiển thị ở trên, nó sẽ tạo ra:
hicolor_emacs.png -> /usr/share/icons/hicolor/48x48/apps/emacs.png
Mint-X_emacs.png -> /usr/share/icons/Mint-X/apps/22/emacs.png
Bây giờ bạn có thể, duyệt đến ~/foo
và xem:
Sau đó, để có được các gói nguồn, bạn có thể chạy:
for i in ~/foo/*; do dpkg -S $(readlink -f "$i"); done