Как установить первое изображение каждой папки в качестве значка папки?

19

Если в папке A, B, C ..... Z есть изображения, как автоматически установить первое изображение в каждой из этих папок в качестве значка папки? Есть ли способ, как сценарий или что-то еще?

JulianLai
источник

Ответы:

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()используется, это также работает, если целевой папкой является ссылка.

РЕДАКТИРОВАТЬ

Отменить (сбросить) пользовательские значки внутри каталога рекурсивно

Если по какой-либо причине вы хотите сбросить значки внутри папки на их значки по умолчанию, используйте приведенный ниже скрипт. Просто:

  • скопируйте его в пустой файл, сохраните как 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 Дешмук