Comment définir la première image de chaque dossier comme son icône de dossier?
La question liée ci-dessus a une réponse consistant en un script qui a fonctionné pour moi. Cela nécessite juste une petite amélioration.
Il trouve des fichiers avec les extensions .jpg, .jpeg, .png, .gif, .icns, .ico et les définit comme l'icône de dossier du dossier. dans lequel le fichier a été trouvé. Cela fonctionne sur plusieurs dossiers, de manière récursive. En gros, il essaie de trouver un fichier image dans le dossier et la première image trouvée est définie comme une icône de dossier. Cela fonctionne très bien dans de nombreux scénarios et la configuration de ce script est généralement la première chose à faire après une nouvelle installation (car elle est incroyable).
Il peut y avoir quelques répertoires contenant un grand nombre de fichiers image et le premier fichier image de ce répertoire peut ne pas convenir à l'icône de dossier.
Au lieu d'être basé sur une extension, s'il devenait un nom de fichier et ciblé (par exemple, folder.png
) ou plusieurs (par exemple, albumart.png
cover.png
) noms de fichiers, ce problème pourrait être résolu.
ou mieux encore, faire en sorte que les deux approches fonctionnent en un seul script
filenames
Je pourrais encore "l'éléger un peu" mais ci-dessous sont les versions éditées de celles liées.
J'ai ajouté une liste prédéfinie à la section head:
specs = ["folder.png", "cover.png", "monkey.png"]
et j'ai remplacé:
try:
first = min(p for p in os.listdir(folder)
if p.split(".")[-1].lower() in ext)
except ValueError:
pass
par:
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
de sorte que le script essaie d'abord de trouver les correspondances (fichier) dans la liste specs
, (uniquement) s'il n'y en a pas, il passe à la recherche de l'extension correspondante et fait le tour s'il trouve une image appropriée.
A utiliser avec le répertoire ciblé en 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))
])
change_icon.py
Exécutez-le avec le répertoire ciblé comme argument:
python3 /path/to/change_icon.py <targeted_directory>
C'est ça!
#!/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))
])
Créer, s'il n'existe pas encore, le répertoire
~/.local/share/nautilus/scripts
Copiez le script dans un fichier vide, enregistrez-le dans ~/.local/share/nautilus/scripts
en tant que set_foldericons
(sans extension!) Et rendez-le exécutable . .
Si, pour une raison quelconque, vous souhaitez rétablir les icônes par défaut des icônes d’un dossier, utilisez le script ici