Pythonで撮影日を指定してJPG画像をコピーするスクリプト

はじめに

写真を整理するときに「特定の日付の写真だけをコピーしたい」と思ったことはありませんか? 今回紹介する Python スクリプトでは、撮影日(作成日や変更日)を指定して .jpg 画像を自動でコピー することができます。

機能概要

このスクリプトでは以下のことが可能です。

今日の日付のJPG画像をコピー(デフォルト動作)
--date YYYY-MM-DD で指定した日付の画像をコピー
--days-ago N で N 日前の画像をコピー
macOS の st_birthtime(作成日) に対応
拡張子 .jpg .JPG 両方の画像を処理

スクリプトコード

import os
import shutil
import argparse
from datetime import datetime, timedelta
from pathlib import Path

# コピー元・コピー先ディレクトリの指定
source_dir = "/path/to/source_directory"  # コピー元
dest_dir = "/path/to/destination_directory"  # コピー先

def get_target_date(args):
    """
    コマンドライン引数から取得した日付を返す。
    指定がなければ今日の日付をデフォルトとする。
    """
    if args.date:
        return datetime.strptime(args.date, "%Y-%m-%d").date()
    elif args.days_ago is not None:
        return (datetime.today() - timedelta(days=args.days_ago)).date()
    else:
        return datetime.today().date()  # デフォルトは今日

def is_target_date(file_path, target_date):
    """
    ファイルの作成日または変更日が指定した日付と一致するか判定。
    """
    file_stat = os.stat(file_path)
    
    # macOS の場合は st_birthtime を取得、それ以外は st_ctime
    created_date = datetime.fromtimestamp(file_stat.st_ctime).date()
    if hasattr(file_stat, 'st_birthtime'):  # macOS の場合
        created_date = datetime.fromtimestamp(file_stat.st_birthtime).date()
    
    modified_date = datetime.fromtimestamp(file_stat.st_mtime).date()
    
    # デバッグ用の出力
    print(f"チェック中: {file_path}")
    print(f"  作成日時: {created_date}")
    print(f"  変更日時: {modified_date}")
    print(f"  判定結果: {created_date == target_date or modified_date == target_date}")
    
    return created_date == target_date or modified_date == target_date

def copy_images(target_date):
    """
    指定した日付に作成・変更されたJPG画像をコピー。
    """
    if not os.path.exists(dest_dir):
        os.makedirs(dest_dir)
    
    # 拡張子が大文字・小文字の両方のファイルを取得
    files = list(Path(source_dir).glob("*.jpg")) + list(Path(source_dir).glob("*.JPG"))
    
    for file in files:
        if is_target_date(file, target_date):
            shutil.copy2(file, os.path.join(dest_dir, file.name))
            print(f"コピー: {file} -> {dest_dir}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="指定した日付のJPG画像をコピーするスクリプト")
    parser.add_argument("--date", type=str, help="コピーする日付 (YYYY-MM-DD)")
    parser.add_argument("--days-ago", type=int, help="今日からN日前のデータをコピー")
    
    args = parser.parse_args()
    target_date = get_target_date(args)
    
    print(f"コピー対象日: {target_date}")
    copy_images(target_date)

使用方法

① 今日撮影された画像をコピーする(デフォルト動作)

python3 file_copy.py

② 特定の日付を指定してコピー(例: 2025年2月5日)

python3 file_copy.py --date 2025-02-05

③ N 日前のデータをコピー(例: 3日前)

python3 file_copy.py --days-ago 3

まとめ

このスクリプトを使うことで、特定の日付の画像を簡単に整理できます。 デフォルトでは 今日撮影された画像 をコピーし、オプションを使えば 過去の日付 の画像も取得可能です。

コメント

タイトルとURLをコピーしました