大量のファイルを日付毎フォルダに移動する方法

Stable Diffusionの生成画像をファイルの作成日毎のフォルダに一括移動するスクリプトを作成したため、共有。

以下の様な状態でPNGファイルが保存されているとする。

  • 02-13-2023_16-03-13/

    • txt2img-images/

      • 00135-4292043524.png

      • 00136-1588918178.png

      • 00137-1561085592.png

各ファイルの作成日に基づき、次の様なディレクトリに整理したい。

  • by-date/

    • 2023-02-12/

      • 00135-4292043524.png

    • 2023-02-13/

      • 00136-1588918178.png

      • 00137-1561085592.png

使用ソフト

  • Python 3 for Windows

スクリプト作成

以下内容を「organize.py」などとして保存。

import datetime
import glob
import os
import shutil
import sys

# Wildcard filename match.
FNMATCH = "*.png"

# Where the matched files move to.
DESTINATION = "by-date"
SUBDIR_FORMAT = "%Y-%m-%d"

if len(sys.argv) > 1:
    src_dirname = sys.argv[1]
    count = 0

    for src_filename in glob.glob(f"{src_dirname}/**/{FNMATCH}", recursive=True):
        # Get a creation time on Windows.
        ctime = datetime.datetime.fromtimestamp(os.path.getctime(src_filename))
        basename = os.path.basename(src_filename)

        dst_dirname = os.path.join(DESTINATION, ctime.strftime(SUBDIR_FORMAT))
        dst_filename = os.path.join(dst_dirname, basename)

        if not os.path.isdir(dst_dirname):
            os.makedirs(dst_dirname)

        if os.path.exists(dst_filename):
            print(f"file exists: {dst_filename}")
            continue

        shutil.move(src_filename, dst_filename)
        count += 1

    print(f"{count} files moved.")
else:
    print(f"usage: {sys.argv[0]} DIRECTORY")

# Keep the output window for Windows.
os.system("PAUSE")

実行

Windows であれば上記 organize.py に未分類の親フォルダをドラッグアンドドロップすると、スクリプトのあるディレクトリ同階層に「by-date/20XX-XX-XX」の様なフォルダが作成され、PNGファイルが移動される。

この記事が気に入ったらサポートをしてみませんか?