问题描述
如果文件夹A,B,C…..Z中有图片,如何自动将每个文件夹中的第一张图片设置为其文件夹图标?有没有像脚本之类的方法或其他方法?
最佳回答
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))
])
如何使用
-
将脚本复制到一个空文件中,保存为
change_icon.py
-
在脚本的头部,根据需要编辑要用作有效图标图像的扩展名列表。
-
使用目标目录作为参数运行它:
\n
python3 /path/to/change_icon.py <targeted_directory>\n
而已!
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))
])
使用
-
创建(如果尚不存在)目录
\n
~/.local/share/nautilus/scripts\n
-
将脚本复制到一个空文件中,将其作为
set_foldericons
(无扩展名!)保存在~/.local/share/nautilus/scripts
中,并使其可执行。 -
注销并重新登录,它可以工作。
说明
-
这将更改右键单击文件夹中所有文件夹的图标,而不是文件夹本身的图标。
-
由于使用了
os.path.realpath()
,因此如果目标文件夹是链接,这也适用。
EDIT
递归地撤消(重置)目录中的自定义图标
如果出于某种原因您想将文件夹中的图标重置为默认图标,请使用以下脚本。简单地:
-
将其复制到一个空文件中,将其保存为
reset_icons.py
-
通过以下命令运行它:
\n
python3 /path/to/reset_icons.py <target_directory>\n
剧本
#!/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"
])