Como definir a primeira imagem de cada pasta como seu ícone de pasta?

19

Se houver imagens nas pastas A, B, C ..... Z, como definir automaticamente a primeira imagem em cada uma dessas pastas como seu ícone de pasta? Existe uma maneira como um script ou algo mais?

JulianLai
fonte

Respostas:

28

1. Altere automaticamente o ícone da pasta para a primeira imagem encontrada dentro

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

Download a partir de Pastebin

Como usar

  1. Copie o script em um arquivo vazio, salve-o como change_icon.py
  2. No cabeçalho do script, edite, se quiser, a lista de extensões a serem usadas como imagens de ícone válidas.
  3. Execute-o com o diretório de destino como argumento:

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

É isso aí!

2. Mais avançado

... é torná-lo uma opção de clique com o botão direito do mouse no nautilus:

insira a descrição da imagem aqui

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

Download a partir de Pastebin

Usar

  1. Crie, se ainda não existir, o diretório

    ~/.local/share/nautilus/scripts
  2. Copie o script em um arquivo vazio, salve-o ~/.local/share/nautilus/scriptscomo set_foldericons(sem extensão!) E torne-o executável .

  3. Saia e entre novamente, ele funciona.

Notas

  • Isso mudará o ícone de todas as pastas dentro da pasta clicada com o botão direito, e não da própria pasta.
  • Como os.path.realpath()é usado, isso também funciona se a pasta de destino for um link.

EDITAR

Desfazer (redefinir) os ícones personalizados dentro de um diretório recursivamente

Se, por algum motivo, você quiser redefinir os ícones dentro de uma pasta para os ícones padrão, 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"
            ])
Jacob Vlijm
fonte
Eu descobri que eu tinha para introduzir o caminho completo, como "/ home / user / folderName"
JulianLai
Se eles adicionarem essa função ao Nautilus, será um melhor gerenciador de arquivos.
precisa saber é o seguinte
Vamos continuar esta discussão no chat .
Jacob Vlijm
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
terdon
@JacobVlijm, em vez da primeira imagem na pasta, posso escolher um arquivo exclusivo, por exemplo, .folder.pngem todas as pastas. isso é realmente útil para os diretórios com mais de uma imagem. Eu tenho usado este script e essa é uma melhoria que eu adoraria ver nele askubuntu.com/questions/900785/...
Sumeet Deshmukh