¿Cómo establecer la primera imagen de cada carpeta como su icono de carpeta?

19

Si hay imágenes en la carpeta A, B, C ..... Z, ¿cómo configuro automáticamente la primera imagen en cada una de estas carpetas como su icono de carpeta? ¿Hay alguna manera como un script o algo más?

    
pregunta JulianLai 08.07.2016 - 07:34

1 respuesta

27

1. Cambiar automáticamente el icono de la carpeta a la primera imagen encontrada dentro de

El siguiente script de Python cambiará el icono de todas las carpetas dentro de un directorio (recursivamente) en el primer archivo de imagen válido encontrado dentro de la carpeta.

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

Descargar desde Pastebin

Cómo usar

  1. Copie la secuencia de comandos en un archivo vacío, guárdelo como change_icon.py
  2. En el encabezado del script, edite, si lo desea, la lista de extensiones que se usarán como imágenes de icono válidas.
  3. Ejecútelo con el directorio de destino como argumento:

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

¡Eso es todo!

2. Más avanzado

... es hacer que sea una opción de clic derecho en nautilus:

El script es ligeramente diferente a continuación:

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

Descargar desde Pastebin

Para usar

  1. Crear, si aún no existe, el directorio

    ~/.local/share/nautilus/scripts
    
  2. Copie la secuencia de comandos en un archivo vacío, guárdelo en ~/.local/share/nautilus/scripts como set_foldericons (sin extensión) y haga que sea ejecutable .

  3. Cerrar sesión y volver a entrar, funciona.

Notas

  • Esto cambiará el icono de todas las carpetas dentro de la carpeta en la que se hace clic con el botón derecho, no de la carpeta en sí.
  • Como se usa os.path.realpath() , esto también funciona si la carpeta de destino es un enlace.

EDITAR

Deshacer (restablecer) los iconos personalizados dentro de un directorio recursivamente

Si, por algún motivo, desea restablecer los iconos dentro de una carpeta a su (s) icono (s) predeterminado (s), utilice la secuencia de comandos siguiente. Simplemente:

  • cópielo en un archivo vacío, guárdelo como reset_icons.py
  • ejecutarlo por el comando:

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

El 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"
            ])
    
respondido por el Jacob Vlijm 08.07.2016 - 08:42

Lea otras preguntas en las etiquetas