Macで写真の日付ごとにフォルダ分けしたい場合

写真を取り込んでパソコンで管理する場合、撮影日でフォルダ分けしている人が多いと思います。Windowsではそうしたフリーソフトが沢山ありますが、Macではあまり見かけないので、スクリプトで行う事にしました。Exif情報から取得してもよいのですが、画像ファイルの作成日ごとに振り分けても問題ないので、手軽なこちらの方法を紹介します。

ここでは、年・月・日の階層構造のフォルダを作成し、その中に写真を分類するAppleScriptを以下に示します。このスクリプトはまず年のフォルダを作成し、その中に月のフォルダ、さらにその中に日のフォルダを作成して、写真を適切なフォルダに移動します。

スクリプトエディタを起動したら、下記のように入力して保存します。

-- 写真が保存されているフォルダを選択する
set sourceFolder to choose folder with prompt "写真が保存されているフォルダを選択してください:"

-- 写真を分類する
tell application "Finder"
    set theFiles to every file of sourceFolder
    repeat with thisFile in theFiles
        set fileCreationDate to creation date of thisFile
        set yearFolderName to year of fileCreationDate as string
        set monthFolderName to my zeroPad(month of fileCreationDate as number)
        set dayFolderName to my zeroPad(day of fileCreationDate as number)
        
        -- 年フォルダのチェックと作成
        if not (exists folder yearFolderName of sourceFolder) then
            make new folder at sourceFolder with properties {name:yearFolderName}
        end if
        set yearFolder to folder yearFolderName of sourceFolder
        
        -- 月フォルダのチェックと作成
        if not (exists folder monthFolderName of yearFolder) then
            make new folder at yearFolder with properties {name:monthFolderName}
        end if
        set monthFolder to folder monthFolderName of yearFolder
        
        -- 日フォルダのチェックと作成
        if not (exists folder dayFolderName of monthFolder) then
            make new folder at monthFolder with properties {name:dayFolderName}
        end if
        set dayFolder to folder dayFolderName of monthFolder
        
        -- ファイルを適切なフォルダへ移動
        move thisFile to dayFolder
    end repeat
end tell

-- 数字が一桁の場合にゼロパディングする補助関数
to zeroPad(n)
    if n < 10 then
        return "0" & n
    else
        return n as string
    end if
end zeroPad

このスクリプトを実行すると、選択したフォルダ内のファイルの「作成日」をもとに、年→月→日という階層構造のフォルダを作成し、ファイルを適切な場所へ移動します。creation dateプロパティはファイルシステムによってファイルが作成された日時を指し、写真の撮影日時とは異なる可能性があるので注意してください。また、フォルダ名の形式はYYYY, MM, DDとなります。必要に応じてスクリプトを調整してください。

(おまけ)月フォルダは年月、日フォルダは年月日に

上記とほとんど変わらないのですが、月フォルダは年月で。たとえば2024年2月なら、フォルダ名は「202402」に。日フォルダは年月日で。たとえば2024年2月2日なら、フォルダ名は「20240202」に。

-- 写真が保存されているフォルダを選択する
set sourceFolder to choose folder with prompt "写真が保存されているフォルダを選択してください:"

-- 写真を分類する
tell application "Finder"
    set theFiles to every file of sourceFolder
    repeat with thisFile in theFiles
        set fileCreationDate to creation date of thisFile
        set yearFolderName to year of fileCreationDate as text
        set monthFolderName to my zeroPad(month of fileCreationDate as number)
        set dayFolderName to my zeroPad(day of fileCreationDate as number)
        set yearMonthFolderName to yearFolderName & monthFolderName
        set yearMonthDayFolderName to yearMonthFolderName & dayFolderName
        
        -- 年フォルダのチェックと作成
        if not (exists folder yearFolderName of sourceFolder) then
            make new folder at sourceFolder with properties {name:yearFolderName}
        end if
        set yearFolder to folder yearFolderName of sourceFolder
        
        -- 年月フォルダのチェックと作成
        if not (exists folder yearMonthFolderName of yearFolder) then
            make new folder at yearFolder with properties {name:yearMonthFolderName}
        end if
        set yearMonthFolder to folder yearMonthFolderName of yearFolder
        
        -- 年月日フォルダのチェックと作成
        if not (exists folder yearMonthDayFolderName of yearMonthFolder) then
            make new folder at yearMonthFolder with properties {name:yearMonthDayFolderName}
        end if
        set yearMonthDayFolder to folder yearMonthDayFolderName of yearMonthFolder
        
        -- ファイルを適切なフォルダへ移動
        move thisFile to yearMonthDayFolder
    end repeat
end tell

-- 数字が一桁の場合にゼロパディングする補助関数
to zeroPad(n)
    if n < 10 then
        return "0" & n
    else
        return n as text
    end if
end zeroPad

(おまけ2 Exif情報から撮影日を取得してフォルダ分けする)

Exif情報から撮影日時を取得して、年→年月→年月日の階層構造でフォルダを作成し、写真を分類するAppleScriptを作成するには、まずExifToolがインストールされている必要があります。以下はExifToolを使用してExif情報を取得し、写真を分類するスクリプトです。

-- ExifToolのパス
set exifToolPath to "/usr/local/bin/exiftool"

-- 写真が保存されているフォルダを選択する
set sourceFolder to choose folder with prompt "写真が保存されているフォルダを選択してください:"

tell application "Finder"
    set theFiles to every file of sourceFolder whose name extension is in {"jpg", "jpeg", "tif", "tiff", "png", "heic"}
    repeat with thisFile in theFiles
        set filePath to POSIX path of (thisFile as alias)
        set fileDate to do shell script exifToolPath & " -DateTimeOriginal -d \"%Y:%m:%d %H:%M:%S\" -S -s -s " & quoted form of filePath
        if fileDate is not "" then
            set text item delimiters to {":"}
            set dateParts to text items of fileDate
            set yearFolderName to item 1 of dateParts
            set monthFolderName to item 2 of dateParts
            set dayFolderName to item 3 of dateParts
            set yearMonthFolderName to yearFolderName & monthFolderName
            set yearMonthDayFolderName to yearFolderName & monthFolderName & dayFolderName
            
            -- 年フォルダのチェックと作成
            if not (exists folder yearFolderName of sourceFolder) then
                make new folder at sourceFolder with properties {name:yearFolderName}
            end if
            set yearFolder to folder yearFolderName of sourceFolder
            
            -- 年月フォルダのチェックと作成
            if not (exists folder yearMonthFolderName of yearFolder) then
                make new folder at yearFolder with properties {name:yearMonthFolderName}
            end if
            set yearMonthFolder to folder yearMonthFolderName of yearFolder
            
            -- 年月日フォルダのチェックと作成
            if not (exists folder yearMonthDayFolderName of yearMonthFolder) then
                make new folder at yearMonthFolder with properties {name:yearMonthDayFolderName}
            end if
            set yearMonthDayFolder to folder yearMonthDayFolderName of yearMonthFolder
            
            -- ファイルを適切なフォルダへ移動
            move thisFile to yearMonthDayFolder
        end if
    end repeat
end tell

このスクリプトは、Exif情報から「DateTimeOriginal」のデータを取得し、その情報をもとにフォルダを作成して写真を移動します。フォルダは年(例:「2024」)、年月(例:「202402」)、年月日(例:「20240202」)の形式で作成されます。なお、Exif情報がない写真は移動されません。

ExifToolがまだインストールされていない場合は、以下のコマンドをターミナルで実行してインストールしてください。

brew install exiftool

これはパッケージ管理ツールのHomebrewを使用したインストール方法です。Homebrewがインストールされていない場合は、Homebrewを先にインストールする必要があります。

Homebrewをインストールするには、ターミナルを使用して以下のコマンドを実行します。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

このコマンドは、Homebrewのインストールスクリプトをダウンロードし、それを実行するためのものです。コマンドを実行すると、インストールプロセスが開始されます。プロンプトが表示されたら、画面の指示に従ってください。パスワードの入力を求められることがありますが、これは通常、あなたのMacのユーザーアカウントのパスワードです。インストールが完了したら、ターミナルで brew doctor を実行して、Homebrewが正しくインストールされていることを確認できます。

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