본문 바로가기

IT&Tech/Software

macOS: 사진 정리 꿀팁 ft.애플 스크립트

728x90
반응형

애플에는 스크립트 편집기가 있다. 그걸 이용해서 프로그래밍을 할 수 있는데, 이를 이용해서 사진정리하는 방법을 알아보자.

우선 필자가 원하는 부분을 정리해보면
1. 메모리 혹은 폴더에 있는 사진을 촬영된 날짜의 폴더로 옮긴다.
2. 파일명을 년월일(6자리)_시분초(6자리)_파일명 으로 바꿔준다.

이렇게 할 수 있도록 한 것이 아래 스크립트이다.

use AppleScript version "2.4" -- Yosemite (10.10) or later
use scripting additions


set sourceDisk to (choose folder with prompt "Select the memory card drive:" default location "/Volumes")

-- default is to copy to a new folder on your desktop. Change as appropriate
set desktopFolder to (choose folder with prompt "Where should the files be copied to?")

tell application "Finder"
	-- move to a "photos" folder on your desktop
	if exists folder "Photos" of desktopFolder then
		set destFolder to folder "Photos" of desktopFolder
	else
		set destFolder to (make new folder at desktopFolder with properties {name:"Photos"})
	end if
	-- get a list of files to move
	set files2Copy to every file of entire contents of sourceDisk whose name extension is in {"jpg", "raf", "orf", "erf", "fff", "crw", "cr2", "cr3", "dng", "mef", "mos", "srw", "ptx", "pef", "rw2", "pxn", "tif", "k25", "kdc", "dcs", "dcr", "drf", "cap", "tif", "iiq", "mrw", "arw", "srf", "sr2", "bay", "r3d", "nef", "nrw", "x3f", "mov", "mp4", "xmf", "avi", "THM", "LRV"}
	
	-- iterate through the files
	repeat with eachFile in files2Copy
		-- get the creation date
		set dt to creation date of eachFile
		-- process the various date strings
		set fn to my getFolderName(dt)
		set d to my getDateStr(dt)
		set t to my getTimeStr(dt)
		-- is there already an appropriate destination folder?
		if exists folder fn of destFolder then
			set this_folder to folder fn of destFolder
		else
			set this_folder to make new folder at destFolder with properties {name:fn}
		end if
		-- move the file
		set newFile to duplicate eachFile to this_folder
		-- and rename it
		set name of newFile to d & "_" & t & "_" & name of newFile
	end repeat
end tell

on getFolderName(theDate)
	-- handler to return yyyy.mm.dd "from a given date
	set y to (year of theDate as text)
	set m to text -2 through -1 of ("0" & (month of theDate as integer))
	set d to text -2 through -1 of ("0" & day of theDate)
	return y & "." & m & "." & d as text
end getFolderName


on getDateStr(theDate)
	-- handler to return yymmdd from a given date
	set y to text -2 through -1 of (year of theDate as text)
	set m to text -2 through -1 of ("0" & (month of theDate as integer))
	set d to text -2 through -1 of ("0" & day of theDate)
	return y & m & d as text
end getDateStr

on getTimeStr(theDate)
	-- handler to return hhmmss from a given date
	set s to time of theDate
	set h to s div 3600
	set m to (s mod 3600) div 60
	set s to s mod 60
	return (text -2 through -1 of ("0" & h) & text -2 through -1 of ("0" & m) & text -2 through -1 of ("0" & s)) as text
end getTimeStr

스크립트 편집기를 통해 재생해보면 위와 이야기했던 형태로 제작될 수 있다. 스크립트 편집기를 적어서 저장해서 첨부한다. 필요하면 연구해서 커스터마이징도 가능하니 잘 활용하길 바란다. 이 스크립트 자체를 필자가 만든게 아닌 애플 커뮤니티를 통해 필자가 궁금한 부분을 질문했고 카멜롯이란 사람이 답을 남겨주었다. [링크]

사진 옮기기.scpt
0.01MB

 

728x90
반응형