はじめに
写真を整理するときに「特定の日付の写真だけをコピーしたい」と思ったことはありませんか? 今回紹介する 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
まとめ
このスクリプトを使うことで、特定の日付の画像を簡単に整理できます。 デフォルトでは 今日撮影された画像 をコピーし、オプションを使えば 過去の日付 の画像も取得可能です。
コメント