Як встановити перше зображення кожної папки як її значок папки?


19

Якщо в папках A, B, C ..... Z є зображення, як я автоматично встановлюю перше зображення у кожній з цих папок як значок своєї папки? Чи є такий спосіб, як сценарій чи щось інше?

Відповіді:


28

1. Автоматично змінюйте значок папки на перше знайдене зображення всередині

Сценарій python нижче змінить піктограму всіх папок всередині каталогу (рекурсивно) в перший знайдений дійсний файл зображення всередині папки.

Сценарій

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

Завантажити з Pastebin

Як користуватись

  1. Скопіюйте скрипт у порожній файл, збережіть його як change_icon.py
  2. У голові сценарію відредагуйте, якщо вам подобається, список розширень, які використовуватимуться як дійсні зображення значків.
  3. Запустіть його з цільовим каталогом як аргумент:

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

Це воно!

2. Більш просунутий

... це зробити варіант клацання правою кнопкою миші в nautilus:

введіть тут опис зображення

Сценарій дещо відрізняється від цього:

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

Завантажити з Pastebin

Використовувати

  1. Створіть, якщо він ще не існує, каталог

    ~/.local/share/nautilus/scripts
  2. Скопіюйте скрипт у порожній файл, збережіть його у ~/.local/share/nautilus/scriptsвигляді set_foldericons(без розширення!) Та зробіть його виконуваним .

  3. Вийдіть із системи та знову увійдіть, він працює.

Примітки

  • Це змінить піктограму всіх папок всередині папки правою кнопкою миші, а не самої папки.
  • Оскільки os.path.realpath()використовується, це також працює, якщо цільова папка є посиланням.

EDIT

Повторно скасовуйте (скиньте) власні піктограми всередині каталогу

Якщо з якоїсь причини ви хочете скинути піктограми всередині папки до значків за замовчуванням, скористайтеся наведеним нижче сценарієм. Просто:

  • скопіюйте його в порожній файл, збережіть як reset_icons.py
  • запустити його командою:

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

Сценарій

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

Я виявив, що мені потрібно ввести повний шлях, наприклад "/ home / user / folderName"
JulianLai

Якщо вони додадуть цю функцію до Nautilus, це буде кращим файловим менеджером.
JulianLai


Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
тердон

@JacobVlijm замість першого зображення в папці можна зробити так, щоб він обрав унікальний файл, наприклад .folder.pngу кожній папці. це дуже корисно для каталогів, що мають більше одного зображення. Я використовував цей сценарій, і це одне вдосконалення, яке я хотів би побачити в ньому askubuntu.com/questions/900785/…
Sumeet Deshmukh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.