web-dev-qa-db-ja.com

すべてのフォルダーの最初の画像をフォルダーアイコンとして設定する方法は?

フォルダーA、B、C ..... Zに画像がある場合、これらの各フォルダーの最初の画像をフォルダーアイコンとして自動的に設定するにはどうすればよいですか?スクリプトなどの方法はありますか?

19
JulianLai

1.フォルダーアイコンを最初に見つかった画像に自動的に変更します

以下のpythonスクリプトは、ディレクトリ内のすべてのフォルダのアイコンを(再帰的に)フォルダ内のfirst見つかった有効な画像ファイルに変更します。

スクリプト

#!/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で右クリックオプションにすることです。

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/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"
            ])
28
Jacob Vlijm