Come impostare la prima immagine di ogni cartella come icona della sua cartella?

19

Se ci sono immagini nella cartella A, B, C ..... Z, come faccio a impostare automaticamente la prima immagine in ciascuna di queste cartelle come icona della sua cartella? C'è un modo come uno script o qualcos'altro?

    
posta JulianLai 08.07.2016 - 09:34

1 risposta

27

1. Cambia automaticamente l'icona della cartella nella prima immagine trovata all'interno

Lo script di python qui sotto cambierà l'icona di tutte le cartelle all'interno di una directory (in modo ricorsivo) nel file di immagine valido primo trovato all'interno della cartella.

Lo 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))
                  ])

Scarica da Pastebin

Come usare

  1. Copia lo script in un file vuoto, salvalo come change_icon.py
  2. Nella parte superiore dello script, modifica, se lo desideri, l'elenco di estensioni da utilizzare come immagini di icone valide.
  3. Eseguilo con la directory di destinazione come argomento:

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

Questo è tutto!

2. Più avanzato

... è di renderlo un'opzione del tasto destro in nautilus:

Lo script è leggermente diverso da:

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

Scarica da Pastebin

Per utilizzare

  1. Crea, se non esiste ancora, la directory

    ~/.local/share/nautilus/scripts
    
  2. Copia lo script in un file vuoto, salvalo in ~/.local/share/nautilus/scripts come set_foldericons (senza estensione!) e rendilo eseguibile .

  3. Esci e torna indietro, funziona.

Note

  • Questo cambierà l'icona di tutte le cartelle all'interno della cartella con il tasto destro, non della cartella stessa.
  • Poiché viene utilizzato os.path.realpath() , questo funziona anche se la cartella di destinazione è un collegamento.

Modifica

Annulla (ripristina) le icone personalizzate all'interno di una directory in modo ricorsivo

Se, per qualche motivo, desideri reimpostare le icone all'interno di una cartella sulle loro icone predefinite, utilizza lo script seguente. Semplicemente:

  • copialo in un file vuoto, salvalo come reset_icons.py
  • eseguilo con il comando:

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

Lo 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"
            ])
    
risposta data Jacob Vlijm 08.07.2016 - 10:42

Leggi altre domande sui tag