Как автоматически установить значки папок для нескольких папок?

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

У связанного выше вопроса есть ответ, состоящий из скрипта, который работает для меня. Это нужно немного улучшить.

Что он делает?

Он находит файлы с расширениями и наборами .jpg, .jpeg, .png, .gif, .icns, .ico их как значок папки в папке, в которой был найден файл. Он работает в нескольких папках, рекурсивно. В основном он пытается найти файл изображения внутри папки, и первое найденное им изображение устанавливается как значок папки. Он отлично подходит для многих сценариев, и настройка этого сценария, как правило, первая вещь, которую я делаю после новой установки (потому что это потрясающе).

В чем проблема?

Возможно, несколько каталогов, которые содержат множество файлов изображений, и первый файл изображения в этом каталоге может быть не совсем подходящим для того, чтобы быть значком папки.

Что делать?

Вместо если это было основано на именах файлов и целевых (например, folder.png) или нескольких (например, albumart.png cover.png), тогда эта проблема может быть решена.

или еще лучше оба подхода работают в одном скрипте

Найти предопределенные filenames Если найдено, установите его как значок папки и перейдите в следующую папку. Если не найдено, найдите предопределенное расширение и установите его как значок папки и перейдите в следующую папку [ ! d11]
10
задан 24 May 2017 в 22:38

6 ответов

Я все еще могу «немного изящно», но ниже приведены отредактированные версии связанных.

В чем разница?

Я добавил предопределенный список в head:

specs = ["folder.png", "cover.png", "monkey.png"]

и я заменил:

try:
    first = min(p for p in os.listdir(folder) 
                if p.split(".")[-1].lower() in ext)
except ValueError:
    pass

на:

fls = os.listdir(folder)
try:
    first = [p for p in fls if p in specs]
    first = first[0] if first else min(
        p for p in fls if p.split(".")[-1].lower() in ext
        )
except ValueError:
    pass

, чтобы сценарий сначала попытался найти (файл) совпадений в списке specs, (только), если их нет, он перескакивает на поиск соответствующего расширения и делает трюк, если находит подходящее изображение.

1 , Базовая версия

Используется с целевым каталогом в качестве аргумента:

#!/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"]
# --- set the list of preferred filenames
# --- use quotes
specs = ["folder.png", "cover.png", "monkey.png"]
# ---

# retrieve the path of the targeted folder
dr = sys.argv[1]

for root, dirs, files in os.walk(dr):
    for directory in dirs:
        folder = os.path.join(root, directory)
        try:
            fls = os.listdir(folder)
            first = [p for p in fls if p in specs]
            first = first[0] if first else min(
                p for p in fls if p.split(".")[-1].lower() in ext
                )
        except (ValueError, PermissionError):
            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))
                ])

Как использовать

Скопировать сценарий в пустой файл, сохранить его as change_icon.py В заголовке скрипта отредактируйте, если хотите, список расширений, которые будут использоваться в качестве допустимых изображений значков. Также укажите предпочтительный список имен файлов. Запустите его с целевой директорией в качестве аргумента:
python3 /path/to/change_icon.py <targeted_directory>

Вот и все!

2. Измененный параметр правого щелчка, который будет использоваться как скрипт nautilus (right-click)

#!/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"]
# --- set the list of preferred filenames
# --- use quotes
specs = ["folder.png", "cover.png", "aap.png"]
# ---

def fix(path):
    for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
              ("file://", ""), ("%20", " ")]:
        path = path.replace(c[0], c[1])
    return path

# retrieve the path of the targeted folder
current = fix(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
dr = os.path.realpath(current)

for root, dirs, files in os.walk(dr):
    for directory in dirs:
        folder = os.path.join(root, directory)
        try:
            fls = os.listdir(folder)
            first = [p for p in fls if p in specs]
            first = first[0] if first else min(
                p for p in fls if p.split(".")[-1].lower() in ext
                )
        except (ValueError, PermissionError):
            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))
                ])

Использовать

Скопировать сценарий в пустой файл, сохранить он как change_icon.py Скопируйте сценарий в пустой файл, сохраните его в ~/.local/share/nautilus/scripts как set_foldericons (без расширения!) и сделайте его исполняемым. В заголовке скрипта отредактируйте, если хотите, список расширений, которые будут использоваться в качестве допустимых изображений значков. Также укажите предпочтительный список имен файлов. Выйдите из системы и вернитесь, и он работает.

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

8
ответ дан 22 May 2018 в 23:55
  • 1
    Вы должны убедиться, что URI от Nautilus начинается с file://. Вместо replace("%20", " ") вы должны использовать правильное декодирование URI (например, urllib.parse.unquote) и более позднюю кодировку (urllib.parse.quote). – David Foerster 24 May 2017 в 16:49
  • 2
    @DavidFoerster это все-таки улучшить производительность скрипта? Я попытался изменить subprocess.Popen на subprocess.call, но на огромные каталоги с почти 700+ юнитами не все иконки папок chnage. – Sumeet Deshmukh 25 May 2017 в 07:07
  • 3
    @DavidFoerster благодарит! но urllib.parse.quote отлично работает на "сухом" тест, а не сценарий. Нужно выяснить, почему, но оставив рабочую версию скрипта на данный момент. – Jacob Vlijm 25 May 2017 в 09:35
  • 4
    @SumeetDeshmukh: Нет, но он заставит скрипт работать с URL-адресами, которые содержат другие «специальные». символов в стороне от символа пробела (U + 0020). Кроме того, он будет более надежным против ошибочного или фиктивного ввода и поймать его на ранней стадии. – David Foerster 25 May 2017 в 12:11
  • 5
    @JacobVlijm: Что происходит, когда вы пытаетесь использовать его в скрипте? Сообщение об ошибке? Неожиданные результаты? Работает ли unquote так, как ожидалось? – David Foerster 25 May 2017 в 12:14

Я все еще могу «немного изящно», но ниже приведены отредактированные версии связанных.

В чем разница?

Я добавил предопределенный список в head:

specs = ["folder.png", "cover.png", "monkey.png"]

и я заменил:

try: first = min(p for p in os.listdir(folder) if p.split(".")[-1].lower() in ext) except ValueError: pass

на:

fls = os.listdir(folder) try: first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except ValueError: pass

, чтобы сценарий сначала попытался найти (файл) совпадений в списке specs, (только), если их нет, он перескакивает на поиск соответствующего расширения и делает трюк, если находит подходящее изображение.

1 , Базовая версия

Используется с целевым каталогом в качестве аргумента:

#!/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"] # --- set the list of preferred filenames # --- use quotes specs = ["folder.png", "cover.png", "monkey.png"] # --- # retrieve the path of the targeted folder dr = sys.argv[1] for root, dirs, files in os.walk(dr): for directory in dirs: folder = os.path.join(root, directory) try: fls = os.listdir(folder) first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except (ValueError, PermissionError): 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)) ])

Как использовать

Скопировать сценарий в пустой файл, сохранить его as change_icon.py В заголовке скрипта отредактируйте, если хотите, список расширений, которые будут использоваться в качестве допустимых изображений значков. Также укажите предпочтительный список имен файлов. Запустите его с целевой директорией в качестве аргумента: python3 /path/to/change_icon.py <targeted_directory>

Вот и все!

2. Измененный параметр правого щелчка, который будет использоваться как скрипт nautilus (right-click)

#!/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"] # --- set the list of preferred filenames # --- use quotes specs = ["folder.png", "cover.png", "aap.png"] # --- def fix(path): for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"), ("file://", ""), ("%20", " ")]: path = path.replace(c[0], c[1]) return path # retrieve the path of the targeted folder current = fix(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI")) dr = os.path.realpath(current) for root, dirs, files in os.walk(dr): for directory in dirs: folder = os.path.join(root, directory) try: fls = os.listdir(folder) first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except (ValueError, PermissionError): 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)) ])

Использовать

Скопировать сценарий в пустой файл, сохранить он как change_icon.py Скопируйте сценарий в пустой файл, сохраните его в ~/.local/share/nautilus/scripts как set_foldericons (без расширения!) и сделайте его исполняемым. В заголовке скрипта отредактируйте, если хотите, список расширений, которые будут использоваться в качестве допустимых изображений значков. Также укажите предпочтительный список имен файлов. Выйдите из системы и вернитесь, и он работает.

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

8
ответ дан 18 July 2018 в 15:26

Я все еще могу «немного изящно», но ниже приведены отредактированные версии связанных.

В чем разница?

Я добавил предопределенный список в head:

specs = ["folder.png", "cover.png", "monkey.png"]

и я заменил:

try: first = min(p for p in os.listdir(folder) if p.split(".")[-1].lower() in ext) except ValueError: pass

на:

fls = os.listdir(folder) try: first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except ValueError: pass

, чтобы сценарий сначала попытался найти (файл) совпадений в списке specs, (только), если их нет, он перескакивает на поиск соответствующего расширения и делает трюк, если находит подходящее изображение.

1 , Базовая версия

Используется с целевым каталогом в качестве аргумента:

#!/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"] # --- set the list of preferred filenames # --- use quotes specs = ["folder.png", "cover.png", "monkey.png"] # --- # retrieve the path of the targeted folder dr = sys.argv[1] for root, dirs, files in os.walk(dr): for directory in dirs: folder = os.path.join(root, directory) try: fls = os.listdir(folder) first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except (ValueError, PermissionError): 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)) ])

Как использовать

Скопировать сценарий в пустой файл, сохранить его as change_icon.py В заголовке скрипта отредактируйте, если хотите, список расширений, которые будут использоваться в качестве допустимых изображений значков. Также укажите предпочтительный список имен файлов. Запустите его с целевой директорией в качестве аргумента: python3 /path/to/change_icon.py <targeted_directory>

Вот и все!

2. Измененный параметр правого щелчка, который будет использоваться как скрипт nautilus (right-click)

#!/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"] # --- set the list of preferred filenames # --- use quotes specs = ["folder.png", "cover.png", "aap.png"] # --- def fix(path): for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"), ("file://", ""), ("%20", " ")]: path = path.replace(c[0], c[1]) return path # retrieve the path of the targeted folder current = fix(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI")) dr = os.path.realpath(current) for root, dirs, files in os.walk(dr): for directory in dirs: folder = os.path.join(root, directory) try: fls = os.listdir(folder) first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except (ValueError, PermissionError): 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)) ])

Использовать

Скопировать сценарий в пустой файл, сохранить он как change_icon.py Скопируйте сценарий в пустой файл, сохраните его в ~/.local/share/nautilus/scripts как set_foldericons (без расширения!) и сделайте его исполняемым. В заголовке скрипта отредактируйте, если хотите, список расширений, которые будут использоваться в качестве допустимых изображений значков. Также укажите предпочтительный список имен файлов. Выйдите из системы и вернитесь, и он работает.

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

8
ответ дан 24 July 2018 в 20:38

Я все еще могу «немного изящно», но ниже приведены отредактированные версии связанных.

В чем разница?

Я добавил предопределенный список в head:

specs = ["folder.png", "cover.png", "monkey.png"]

и я заменил:

try: first = min(p for p in os.listdir(folder) if p.split(".")[-1].lower() in ext) except ValueError: pass

на:

fls = os.listdir(folder) try: first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except ValueError: pass

, чтобы сценарий сначала попытался найти (файл) совпадений в списке specs, (только), если их нет, он перескакивает на поиск соответствующего расширения и делает трюк, если находит подходящее изображение.

1 , Базовая версия

Используется с целевым каталогом в качестве аргумента:

#!/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"] # --- set the list of preferred filenames # --- use quotes specs = ["folder.png", "cover.png", "monkey.png"] # --- # retrieve the path of the targeted folder dr = sys.argv[1] for root, dirs, files in os.walk(dr): for directory in dirs: folder = os.path.join(root, directory) try: fls = os.listdir(folder) first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except (ValueError, PermissionError): 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)) ])

Как использовать

Скопировать сценарий в пустой файл, сохранить его as change_icon.py В заголовке скрипта отредактируйте, если хотите, список расширений, которые будут использоваться в качестве допустимых изображений значков. Также укажите предпочтительный список имен файлов. Запустите его с целевой директорией в качестве аргумента: python3 /path/to/change_icon.py <targeted_directory>

Вот и все!

2. Измененный параметр правого щелчка, который будет использоваться как скрипт nautilus (right-click)

#!/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"] # --- set the list of preferred filenames # --- use quotes specs = ["folder.png", "cover.png", "aap.png"] # --- def fix(path): for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"), ("file://", ""), ("%20", " ")]: path = path.replace(c[0], c[1]) return path # retrieve the path of the targeted folder current = fix(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI")) dr = os.path.realpath(current) for root, dirs, files in os.walk(dr): for directory in dirs: folder = os.path.join(root, directory) try: fls = os.listdir(folder) first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except (ValueError, PermissionError): 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)) ])

Использовать

Скопировать сценарий в пустой файл, сохранить он как change_icon.py Скопируйте сценарий в пустой файл, сохраните его в ~/.local/share/nautilus/scripts как set_foldericons (без расширения!) и сделайте его исполняемым. В заголовке скрипта отредактируйте, если хотите, список расширений, которые будут использоваться в качестве допустимых изображений значков. Также укажите предпочтительный список имен файлов. Выйдите из системы и вернитесь, и он работает.

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

8
ответ дан 31 July 2018 в 10:57

Я все еще могу «немного изящно», но ниже приведены отредактированные версии связанных.

В чем разница?

Я добавил предопределенный список в head:

specs = ["folder.png", "cover.png", "monkey.png"]

и я заменил:

try: first = min(p for p in os.listdir(folder) if p.split(".")[-1].lower() in ext) except ValueError: pass

на:

fls = os.listdir(folder) try: first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except ValueError: pass

, чтобы сценарий сначала попытался найти (файл) совпадений в списке specs, (только), если их нет, он перескакивает на поиск соответствующего расширения и делает трюк, если находит подходящее изображение.

1 , Базовая версия

Используется с целевым каталогом в качестве аргумента:

#!/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"] # --- set the list of preferred filenames # --- use quotes specs = ["folder.png", "cover.png", "monkey.png"] # --- # retrieve the path of the targeted folder dr = sys.argv[1] for root, dirs, files in os.walk(dr): for directory in dirs: folder = os.path.join(root, directory) try: fls = os.listdir(folder) first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except (ValueError, PermissionError): 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)) ])

Как использовать

Скопировать сценарий в пустой файл, сохранить его as change_icon.py В заголовке скрипта отредактируйте, если хотите, список расширений, которые будут использоваться в качестве допустимых изображений значков. Также укажите предпочтительный список имен файлов. Запустите его с целевой директорией в качестве аргумента: python3 /path/to/change_icon.py <targeted_directory>

Вот и все!

2. Измененный параметр правого щелчка, который будет использоваться как скрипт nautilus (right-click)

#!/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"] # --- set the list of preferred filenames # --- use quotes specs = ["folder.png", "cover.png", "aap.png"] # --- def fix(path): for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"), ("file://", ""), ("%20", " ")]: path = path.replace(c[0], c[1]) return path # retrieve the path of the targeted folder current = fix(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI")) dr = os.path.realpath(current) for root, dirs, files in os.walk(dr): for directory in dirs: folder = os.path.join(root, directory) try: fls = os.listdir(folder) first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except (ValueError, PermissionError): 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)) ])

Использовать

Скопировать сценарий в пустой файл, сохранить он как change_icon.py Скопируйте сценарий в пустой файл, сохраните его в ~/.local/share/nautilus/scripts как set_foldericons (без расширения!) и сделайте его исполняемым. В заголовке скрипта отредактируйте, если хотите, список расширений, которые будут использоваться в качестве допустимых изображений значков. Также укажите предпочтительный список имен файлов. Выйдите из системы и вернитесь, и он работает.

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

8
ответ дан 31 July 2018 в 11:56

Я все еще могу «немного изящно», но ниже приведены отредактированные версии связанных.

В чем разница?

Я добавил предопределенный список в head:

specs = ["folder.png", "cover.png", "monkey.png"]

и я заменил:

try: first = min(p for p in os.listdir(folder) if p.split(".")[-1].lower() in ext) except ValueError: pass

на:

fls = os.listdir(folder) try: first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except ValueError: pass

, чтобы сценарий сначала попытался найти (файл) совпадений в списке specs, (только), если их нет, он перескакивает на поиск соответствующего расширения и делает трюк, если находит подходящее изображение.

1 , Базовая версия

Используется с целевым каталогом в качестве аргумента:

#!/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"] # --- set the list of preferred filenames # --- use quotes specs = ["folder.png", "cover.png", "monkey.png"] # --- # retrieve the path of the targeted folder dr = sys.argv[1] for root, dirs, files in os.walk(dr): for directory in dirs: folder = os.path.join(root, directory) try: fls = os.listdir(folder) first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except (ValueError, PermissionError): 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)) ])

Как использовать

Скопировать сценарий в пустой файл, сохранить его as change_icon.py В заголовке скрипта отредактируйте, если хотите, список расширений, которые будут использоваться в качестве допустимых изображений значков. Также укажите предпочтительный список имен файлов. Запустите его с целевой директорией в качестве аргумента: python3 /path/to/change_icon.py <targeted_directory>

Вот и все!

2. Измененный параметр правого щелчка, который будет использоваться как скрипт nautilus (right-click)

#!/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"] # --- set the list of preferred filenames # --- use quotes specs = ["folder.png", "cover.png", "aap.png"] # --- def fix(path): for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"), ("file://", ""), ("%20", " ")]: path = path.replace(c[0], c[1]) return path # retrieve the path of the targeted folder current = fix(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI")) dr = os.path.realpath(current) for root, dirs, files in os.walk(dr): for directory in dirs: folder = os.path.join(root, directory) try: fls = os.listdir(folder) first = [p for p in fls if p in specs] first = first[0] if first else min( p for p in fls if p.split(".")[-1].lower() in ext ) except (ValueError, PermissionError): 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)) ])

Использовать

Скопировать сценарий в пустой файл, сохранить он как change_icon.py Скопируйте сценарий в пустой файл, сохраните его в ~/.local/share/nautilus/scripts как set_foldericons (без расширения!) и сделайте его исполняемым. В заголовке скрипта отредактируйте, если хотите, список расширений, которые будут использоваться в качестве допустимых изображений значков. Также укажите предпочтительный список имен файлов. Выйдите из системы и вернитесь, и он работает.

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

8
ответ дан 31 July 2018 в 23:40

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

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