Comment définir la première image de chaque dossier comme icône de dossier?

19

S'il y a des images dans le dossier A, B, C ..... Z, comment définir automatiquement la première image dans chacun de ces dossiers comme icône de dossier? Existe-t-il un moyen comme un script ou autre chose?

JulianLai
la source

Réponses:

28

1. Changez automatiquement l'icône du dossier en la première image trouvée à l'intérieur

Le script python ci-dessous changera (récursivement) l'icône de tous les dossiers d'un répertoire en le premier fichier image valide trouvé dans le dossier.

Le script

#!/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"]
# ---

dr = sys.argv[1]

for root, dirs, files in os.walk(dr):
    for directory in dirs:
        folder = os.path.join(root, directory)
        try:
            first = min(p for p in os.listdir(folder) 
                        if p.split(".")[-1].lower() in ext)
        except ValueError:
            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))
                  ])

Télécharger depuis Pastebin

Comment utiliser

  1. Copiez le script dans un fichier vide, enregistrez-le sous change_icon.py
  2. Dans la tête du script, modifiez, si vous le souhaitez, la liste des extensions à utiliser comme images d'icônes valides.
  3. Exécutez-le avec le répertoire cible comme argument:

    python3 /path/to/change_icon.py <targeted_directory>

C'est ça!

2. Plus avancé

... est d'en faire une option de clic droit dans nautilus:

entrez la description de l'image ici

Le script est alors légèrement différent:

#!/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"]
# ---

# retrieve the path of the targeted folder
current = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI").replace("file://", "").replace("%20", " ")
dr = os.path.realpath(current)

for root, dirs, files in os.walk(dr):
    for directory in dirs:
        folder = os.path.join(root, directory)
        try:
            first = min(p for p in os.listdir(folder) 
                        if p.split(".")[-1].lower() in ext)
        except ValueError:
            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))
                  ])

Télécharger depuis Pastebin

Utiliser

  1. Créer, s'il n'existe pas encore, le répertoire

    ~/.local/share/nautilus/scripts
  2. Copiez le script dans un fichier vide, enregistrez-le ~/.local/share/nautilus/scriptssous set_foldericons(sans extension!) Et rendez-le exécutable .

  3. Déconnectez-vous et reconnectez-vous, cela fonctionne.

Remarques

  • Cela changera l'icône de tous les dossiers à l' intérieur du dossier cliqué avec le bouton droit, pas du dossier lui-même.
  • Puisque os.path.realpath()est utilisé, cela fonctionne également si le dossier ciblé est un lien.

ÉDITER

Annuler (réinitialiser) les icônes personnalisées d'un répertoire de manière récursive

Si, pour une raison quelconque, vous souhaitez réinitialiser les icônes d'un dossier à leurs icônes par défaut, utilisez le script ci-dessous. Simplement:

  • le copier dans un fichier vide, l'enregistrer sous reset_icons.py
  • exécutez-le par la commande:

    python3 /path/to/reset_icons.py <target_directory>

Le script

#!/usr/bin/env python3
import subprocess
import os
import sys

dr = sys.argv[1]

for root, dirs, files in os.walk(dr):
    for directory in dirs:
        folder = os.path.join(root, directory)
        subprocess.Popen([
            "gvfs-set-attribute", os.path.abspath(folder),
            "-t", "unset", "metadata::custom-icon"
            ])
Jacob Vlijm
la source
J'ai trouvé que je devais entrer le chemin complet, tel que "/ home / user / folderName"
JulianLai
S'ils ajoutent cette fonction à Nautilus, ce sera un meilleur gestionnaire de fichiers.
JulianLai
Continuons cette discussion dans le chat .
Jacob Vlijm
Les commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat .
terdon
@JacobVlijm au lieu de la première image dans le dossier, puis-je choisir un fichier unique, par exemple .folder.pngdans chaque dossier. c'est vraiment utile pour les répertoires avec plus d'une image. J'ai utilisé ce script et c'est une amélioration que j'aimerais voir dedans askubuntu.com/questions/900785/…
Sumeet Deshmukh