Jak ustawić pierwsze zdjęcie każdego folderu jako ikonę folderu?

19

Jeśli w folderze A, B, C ..... Z znajdują się zdjęcia, w jaki sposób automatycznie ustawić pierwsze zdjęcie w każdym z tych folderów jako ikonę folderu? Czy istnieje sposób na skrypt lub coś innego?

JulianLai
źródło

Odpowiedzi:

28

1. Automatycznie zmień ikonę folderu na pierwszy znaleziony obraz w środku

Poniższy skrypt Pythona zmieni ikonę wszystkich folderów w katalogu (rekurencyjnie) w pierwszy znaleziony prawidłowy plik obrazu w folderze.

Scenariusz

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

Pobierz z Pastebin

Jak używać

  1. Skopiuj skrypt do pustego pliku i zapisz go jako change_icon.py
  2. W nagłówku skryptu edytuj, jeśli chcesz, listę rozszerzeń, które będą używane jako prawidłowe obrazy ikon.
  3. Uruchom go z docelowym katalogiem jako argumentem:

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

Otóż ​​to!

2. Bardziej zaawansowane

... ma uczynić z niego opcję kliknięcia prawym przyciskiem myszy nautilus:

wprowadź opis zdjęcia tutaj

Skrypt jest nieco inny niż:

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

Pobierz z Pastebin

Używać

  1. Utwórz, jeśli jeszcze nie istnieje, katalog

    ~/.local/share/nautilus/scripts
  2. Skopiuj skrypt do pustego pliku, zapisz go ~/.local/share/nautilus/scriptsjako set_foldericons(bez rozszerzenia!) I spraw , aby był wykonywalny .

  3. Wyloguj się i zaloguj ponownie, to działa.

Uwagi

  • Spowoduje to zmianę ikony wszystkich folderów w folderze klikniętym prawym przyciskiem myszy, a nie samego folderu.
  • Ponieważ os.path.realpath()jest używany, działa to również, jeśli docelowy folder jest linkiem.

EDYTOWAĆ

Cofnij (zresetuj) niestandardowe ikony wewnątrz katalogu rekurencyjnie

Jeśli z jakiegoś powodu chcesz zresetować ikony w folderze do domyślnych ikon, użyj poniższego skryptu. Po prostu:

  • skopiuj go do pustego pliku, zapisz jako reset_icons.py
  • uruchom go za pomocą polecenia:

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

Scenariusz

#!/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
źródło
Odkryłem, że musiałem wprowadzić pełną ścieżkę, na przykład „/ home / user /
folderName
Jeśli dodadzą tę funkcję do Nautilusa, będzie to lepszy menedżer plików.
JulianLai
Daj nam kontynuować tę dyskusję w czacie .
Jacob Vlijm,
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
terdon
@JacobVlijm zamiast pierwszego obrazu w folderze mogę zmusić go do wybrania unikalnego pliku, na przykład .folder.pngw każdym folderze. jest to bardzo pomocne w przypadku katalogów zawierających więcej niż jeden obraz. Korzystam z tego skryptu i jest to jedno ulepszenie, które chciałbym w nim zobaczyć askubuntu.com/questions/900785/…
Sumeet Deshmukh