如何将每个文件夹的第一张图片设置为其文件夹图标?

如何将每个文件夹的第一张图片设置为其文件夹图标?

如果文件夹 A、B、C.....Z 中有图片,如何自动将每个文件夹中的第一张图片设置为其文件夹图标?有没有类似脚本或其他方法?

答案1

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

答案2

脚本 1 中的“gvfs-set-attribute”将在 python3 Ubuntu 18.0.4 中出错

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

我改为

"gio", "set"

答案3

bash 版本在当前路径下查找名为cover.jpg/ 的文件cover.png并将它们设置为容器文件夹的文件夹图标:

IFS="\n" find . -iname "cover.jpg" -o -iname "cover.png" | read COVER; do \
  gio set -t string "$(realpath "$(dirname "$COVER")")" metadata::custom-icon "file://$(realpath "$COVER")"; \
done

相关内容