ดีเอสบางคนแสดงสิ่งนี้เมื่อคุณพยายามที่จะเปลี่ยนไอคอนของบางสิ่ง แต่มันค่อนข้างง่ายที่จะทำด้วยตัวเอง เพียงค้นหาไอคอนทั้งหมดทำการเชื่อมโยงไปยังพวกเขาในบางไดเรกทอรีและเรียกดูไดเรกทอรี ไอคอนของความละเอียดที่แตกต่างกันจะมีชื่อเดียวกันสิ่งที่เปลี่ยนแปลงคือเส้นทาง ตัวอย่างเช่น:
$ 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