1. Alterar automaticamente o ícone da pasta para a primeira imagem encontrada dentro de
O script python abaixo mudará o ícone de todas as pastas dentro de um diretório (recursivamente) para o primeiro arquivo de imagem válido encontrado dentro da pasta.
O 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))
])
Como usar
- Copie o script em um arquivo vazio, salve-o como
change_icon.py
- Na cabeça do script, edite, se desejar, a lista de extensões a serem usadas como imagens de ícone válidas.
-
Execute-o com o diretório de destino como um argumento:
python3 /path/to/change_icon.py <targeted_directory>
É isso aí!
2. Mais avançado
... é para torná-lo uma opção de clique com o botão direito do mouse no nautilus:
O script é um pouco diferente, então:
#!/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))
])
Para usar
-
Crie, se ainda não existir, o diretório
~/.local/share/nautilus/scripts
-
Copie o script em um arquivo vazio, salve-o em
~/.local/share/nautilus/scripts
comoset_foldericons
(sem extensão!) e torne-o executável . - Faça logout e volte, funciona.
Notas
- Isso alterará o ícone de todas as pastas dentro da pasta clicada com o botão direito, não da pasta em si.
- Como
os.path.realpath()
é usado, isso também funciona se a pasta de destino for um link.
EDITAR
Desfazer (reconfigurar) os ícones personalizados dentro de um diretório recursivamente
Se, por algum motivo, você quiser redefinir os ícones dentro de uma pasta para o (s) ícone (s) padrão (s), use o script abaixo. Simplesmente:
- copie-o para um arquivo vazio, salve-o como
reset_icons.py
-
execute-o pelo comando:
python3 /path/to/reset_icons.py <target_directory>
O 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"
])