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

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

19
задан 22 May 2017 в 19:33

2 ответа

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. Более усовершенствованный

... должен сделать это опцией щелчка правой кнопкой в наутилусе:

enter image description here

Сценарий немного отличается затем:

#!/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"
            ])
28
ответ дан 22 May 2017 в 19:33

«gvfs-set-attribute» в сценарии 1. вызовет ошибку в python3 Ubuntu 18.0.4

This tool has been deprecated, use 'gio set' instead.

Я меняю на

"gio", "set"
0
ответ дан 8 April 2020 в 00:28

Другие вопросы по тегам:

Похожие вопросы: