Todavía podría "darle un poco de elegancia", pero a continuación se encuentran las versiones editadas de las vinculadas.
¿Cuál es la diferencia?
Agregué una lista predefinida a la sección principal:
specs = ["folder.png", "cover.png", "monkey.png"]
y reemplacé:
try:
first = min(p for p in os.listdir(folder)
if p.split(".")[-1].lower() in ext)
except ValueError:
pass
por:
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
para que el script primero intente encontrar (archivo) coincidencias en la lista specs
, (solo) si no hay, salta a buscar una extensión coincidente y hace el truco si encuentra una imagen adecuada.
1. La versión básica
Para ser utilizado con el directorio de destino como argumento:
#!/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))
])
Cómo utilizar
- Copie el script en un archivo vacío, guárdelo como
change_icon.py
- 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. Establezca también la lista preferida de nombres de archivo.
Ejecútelo con el directorio de destino como argumento:
python3 /path/to/change_icon.py <targeted_directory>
¡Eso es!
2. La opción editada de hacer clic con el botón derecho, que se utilizará como secuencia de comandos nautilus (clic con el botón derecho)
#!/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))
])
Usar
Cree, si aún no existe, el directorio
~/.local/share/nautilus/scripts
Copie el script en un archivo vacío, guárdelo ~/.local/share/nautilus/scripts
como set_foldericons
(¡sin extensión!) Y hágalo ejecutable .
- 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. Establezca también la lista preferida de nombres de archivo.
- Salga y vuelva a ingresar, y funciona.
Si, por algún motivo, desea restablecer los iconos dentro de una carpeta a sus iconos predeterminados, use el script aquí