問題描述
如果文件夾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"
])