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?

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

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.