写真を取り込んでパソコンで管理する場合、撮影日でフォルダ分けしている人が多いと思います。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が正しくインストールされていることを確認できます。