¿Cómo configurar 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 guión u otra cosa?

JulianLai
fuente

Respuestas:

28

1. Cambie automáticamente el icono de carpeta a la primera imagen encontrada en el interior

El script de Python a continuación 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.

La secuencia de comandos

#!/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 utilizar

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

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

¡Eso es!

2. Más avanzado

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

ingrese la descripción de la imagen aquí

El guión es ligeramente diferente entonces:

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

Usar

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

    ~/.local/share/nautilus/scripts
  2. Copie el script en un archivo vacío, guárdelo ~/.local/share/nautilus/scriptscomo set_foldericons(¡sin extensión!) Y hágalo ejecutable .

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

Notas

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

EDITAR

Deshacer (restablecer) los iconos personalizados dentro de un directorio de forma recursiva

Si, por alguna razón, desea restablecer los íconos dentro de una carpeta a sus íconos predeterminados, use el script a continuación. Simplemente:

  • cópielo en un archivo vacío, guárdelo como reset_icons.py
  • ejecútelo con el comando:

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

La secuencia de comandos

#!/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
fuente
Descubrí que tenía que ingresar la ruta completa, como "/ home / user / folderName"
JulianLai
Si agregan esta función a Nautilus, será un mejor administrador de archivos.
JulianLai
Continuemos esta discusión en el chat .
Jacob Vlijm
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
terdon
@JacobVlijm en lugar de la primera imagen en la carpeta, ¿puedo elegir un archivo único, por ejemplo, .folder.pngen cada carpeta? Esto es realmente útil para los directorios con más de una imagen. He estado usando este script y esa es una mejora que me encantaría ver en askubuntu.com/questions/900785/…
Sumeet Deshmukh