Ich könnte es immer noch "ein bisschen elegant machen", aber unten sind die bearbeiteten Versionen der verknüpften.
Was ist der Unterschied?
Ich habe dem Kopfbereich eine vordefinierte Liste hinzugefügt:
specs = ["folder.png", "cover.png", "monkey.png"]
und ich ersetzte:
try:
first = min(p for p in os.listdir(folder)
if p.split(".")[-1].lower() in ext)
except ValueError:
pass
durch:
fls = os.listdir(folder)
try:
first = [p for p in fls if p in specs]
first = first[0] if first else min(
p for p in fls if p.split(".")[-1].lower() in ext
)
except ValueError:
pass
Damit das Skript zuerst versucht, (Datei-) Übereinstimmungen in der Liste zu specs
finden (nur), wenn keine vorhanden sind, springt es zur Suche nach einer passenden Erweiterung und führt den Trick aus, wenn es ein geeignetes Bild findet.
1. Die Basisversion
Zur Verwendung mit dem Zielverzeichnis als Argument:
#!/usr/bin/env python3
import subprocess
import os
import sys
# --- set the list of valid extensions below (lowercase)
# --- use quotes, *don't* include the dot!
ext = ["jpg", "jpeg", "png", "gif", "icns", "ico"]
# --- set the list of preferred filenames
# --- use quotes
specs = ["folder.png", "cover.png", "monkey.png"]
# ---
# retrieve the path of the targeted folder
dr = sys.argv[1]
for root, dirs, files in os.walk(dr):
for directory in dirs:
folder = os.path.join(root, directory)
try:
fls = os.listdir(folder)
first = [p for p in fls if p in specs]
first = first[0] if first else min(
p for p in fls if p.split(".")[-1].lower() in ext
)
except (ValueError, PermissionError):
pass
else:
subprocess.Popen([
"gvfs-set-attribute", "-t", "string",
os.path.abspath(folder), "metadata::custom-icon",
"file://"+os.path.abspath(os.path.join(folder, first))
])
Wie benutzt man
- Kopieren Sie das Skript in eine leere Datei und speichern Sie es unter
change_icon.py
- Bearbeiten Sie im Kopf des Skripts die Liste der Erweiterungen, die als gültige Symbolbilder verwendet werden sollen, wenn Sie möchten. Legen Sie auch die bevorzugte Liste der Dateinamen fest.
Führen Sie es mit dem Zielverzeichnis als Argument aus:
python3 /path/to/change_icon.py <targeted_directory>
Das ist es!
2. Die bearbeitete Rechtsklick-Option, die als Nautilus-Skript (Rechtsklick) verwendet werden soll
#!/usr/bin/env python3
import subprocess
import os
# --- set the list of valid extensions below (lowercase)
# --- use quotes, *don't* include the dot!
ext = ["jpg", "jpeg", "png", "gif", "icns", "ico"]
# --- set the list of preferred filenames
# --- use quotes
specs = ["folder.png", "cover.png", "aap.png"]
# ---
def fix(path):
for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
("file://", ""), ("%20", " ")]:
path = path.replace(c[0], c[1])
return path
# retrieve the path of the targeted folder
current = fix(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
dr = os.path.realpath(current)
for root, dirs, files in os.walk(dr):
for directory in dirs:
folder = os.path.join(root, directory)
try:
fls = os.listdir(folder)
first = [p for p in fls if p in specs]
first = first[0] if first else min(
p for p in fls if p.split(".")[-1].lower() in ext
)
except (ValueError, PermissionError):
pass
else:
subprocess.Popen([
"gvfs-set-attribute", "-t", "string",
os.path.abspath(folder), "metadata::custom-icon",
"file://"+os.path.abspath(os.path.join(folder, first))
])
Benutzen
Erstellen Sie das Verzeichnis, falls es noch nicht vorhanden ist
~/.local/share/nautilus/scripts
Kopieren Sie das Skript in eine leere Datei, speichern Sie es ~/.local/share/nautilus/scripts
unter set_foldericons
(keine Erweiterung!) Und machen Sie es ausführbar .
- Bearbeiten Sie im Kopf des Skripts die Liste der Erweiterungen, die als gültige Symbolbilder verwendet werden sollen, wenn Sie möchten. Legen Sie auch die bevorzugte Liste der Dateinamen fest.
- Melden Sie sich ab und wieder an, und es funktioniert.
Wenn Sie aus irgendeinem Grund die Symbole in einem Ordner auf ihre Standardsymbole zurücksetzen möchten, verwenden Sie das Skript hier