Potrei ancora "abbellirlo un po '", ma di seguito sono riportate le versioni modificate di quelle collegate.
Qual è la differenza?
Ho aggiunto un elenco predefinito alla sezione head:
specs = ["folder.png", "cover.png", "monkey.png"]
e ho sostituito:
try:
first = min(p for p in os.listdir(folder)
if p.split(".")[-1].lower() in ext)
except ValueError:
pass
di:
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
in modo che lo script provi prima a trovare (file) corrispondenze nell'elenco specs
(solo) se non ci sono, passa alla ricerca dell'estensione corrispondente e fa il trucco se trova un'immagine adatta.
1. La versione base
Da utilizzare con la directory di destinazione come argomento:
#!/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))
])
Come usare
- Copia lo script in un file vuoto, salvalo come
change_icon.py
- Nell'intestazione dello script, modifica, se lo desideri, l'elenco delle estensioni da utilizzare come immagini icona valide. Imposta anche l'elenco preferito di nomi di file.
Eseguilo con la directory di destinazione come argomento:
python3 /path/to/change_icon.py <targeted_directory>
Questo è tutto!
2. L'opzione del tasto destro del mouse modificata, da utilizzare come script nautilus (tasto destro)
#!/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))
])
Usare
Crea, se non esiste ancora, la directory
~/.local/share/nautilus/scripts
Copia lo script in un file vuoto, salvalo ~/.local/share/nautilus/scripts
come set_foldericons
(nessuna estensione!) E rendilo eseguibile .
- Nell'intestazione dello script, modifica, se lo desideri, l'elenco delle estensioni da utilizzare come immagini icona valide. Imposta anche l'elenco preferito di nomi di file.
- Esci e rientra e funziona.
Se, per qualche motivo, desideri reimpostare le icone all'interno di una cartella sulle loro icone predefinite, usa lo script qui