A7C2 사진 파일 자동 정리 스크립트

사진 자동 정리 스크립트

사진 정리가 안되는 폴더

소니 a7c2 의 편리한 기능 중 하나가 ftp1 파일 전송이다. 출시 당시에는 없었지만 펌웨어 업데이트로 추가된 이 기능은 타사 기종의 신기능에 위협을 느껴서 뒤늦게 추가했다는 썰을 들은적이 있다. 그만큼 편리한 기능이다. 테더링 촬영2이 아니라면 사진 촬영 후 항상 메모리 카드의 사진을 PC로 옮기는 작업을 해야 한다. 어쩌다 한번이면 몰라도 잦은 촬영을 한다면 이것도 꽤 번거롭기 마련이다. 자동 FTP 전송 기능을 통해서 와이파이가 연결되는 곳이라면 어디서라도 촬영 직후 카메라가 알아서 사진을 자신의 FTP 서버로 업로드 해준다. a7c2 FTP 서버 세팅에 대해서는 다른 볼트에 올려둔 글이 있으니 아래 링크를 참고하시길 바란다.

기능 자체는 편리한데, 내가 원하는 폴더 구조로 파일을 저장해주는 기능이 없다. 주어지는 선택지는 두 가지 뿐이다. 카메라 자체 파일 트리 구조로 업로드하던지, 단일 폴더에 모두 다 업로드 하던지. 그런데 카메라 자체 폴더 구조가 그다지 직관성이 없다. 하나는 숫자 형태고 다른 하나는 연월일 구조이긴한데 앞에 3자리 숫자가3 붙는다. 물론 날짜순 정렬이 되는 형태이긴 한데 개인적으로는 불편하다. 그래서 아예 20260210 같이 직관적인 구조로 구분하고 싶었다.

카메라 자체 구조는 이런식이라 구분이 어렵다.

스크립트 작동 방식

그래서 일단 업로드는 단일 폴더에 한꺼번에 하도록 해두고 별도 스크립트를 한번 씩 실행해서 알아보기 쉽게 2026-02-21 이런 형식의 폴더로 알아서 옮겨주는 스크립트를 하나 만들어봤다. 사용해보니 별다른 문제 없이 잘 작동해서 공유하니 필요하시면 사용하시길 바란다.

📌 스크립트 정보

파일 목적 : 폴더 안에 위치한 사진 파일 (RAW + JPEG)의 exif 정보를 읽어 그에 해당하는 날짜 폴더(YYYY-MM-DD)를 생성하고 사진 파일들을 알아서 이동 시켜주는 스크립트.
사용 LLM : 제미나이
실행환경 : 윈도우 11 파워쉘

실행 방법은 간단하다. 다운로드한 파일을 우클릭해서 ‘Powershell에서 실행’ 을 선택하면 아래 스크립트가 실행된다. 기본 세팅된 경로는 실행때마다 바꿀수 있게 프롬프트가 뜨는데 적절히 조절하면 된다. 귀찮으면 아래 소스 코드에서 해당 부분을 본인 경로로 바꾸면 된다.

NOTICE

⚠️ 주의 사항

실행시 권한 문제로 경고창이 뜰 수 있는데, 허용을 하거나 미리 아래 명령어를 파워셀에서 입력해도 된다.
C:> Set-ExecutionPolicy RemoteSigned

소스 코드

# 한글 깨짐 방지를 위한 인코딩 설정
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("ks_c_5601-1987")
# 1. 대상 폴더 경로 입력 받기
$defaultPath = "C:\Users\jieun\Sony A7C2"
Write-Host "`n--- 사진 정리 스크립트를 시작합니다 ---" -ForegroundColor Cyan
$inputPath = Read-Host "사진이 있는 폴더 경로를 입력하세요 (엔터 입력 시 기본값: $defaultPath)"
# 입력값이 없으면 기본값 사용
if ([string]::IsNullOrWhiteSpace($inputPath)) {
    $targetPath = $defaultPath
} else {
    $targetPath = $inputPath
}
# 경로 존재 여부 확인
if (-not (Test-Path -Path $targetPath)) {
    Write-Host "오류: [$targetPath] 경로를 찾을 수 없습니다." -ForegroundColor Red
    Pause
    exit
}
# 2. 쉘 객체 생성 (EXIF 데이터 읽기용)
$shell = New-Object -ComObject Shell.Application
$files = Get-ChildItem -Path $targetPath -File
Write-Host "`n정리를 시작합니다. 잠시만 기다려 주세요..." -ForegroundColor Yellow
foreach ($file in $files) {
    # 이미지/동영상 파일만 처리 (확장자 필터링)
    if ($file.Extension -match "jpg|jpeg|arw|mp4|mov") {
        $folderObj = $shell.NameSpace($file.DirectoryName)
        $fileObj = $folderObj.ParseName($file.Name)
        
        # EXIF '찍은 날짜' 데이터 가져오기 (보통 인덱스 12번)
        $dateTakenRaw = $folderObj.GetDetailsOf($fileObj, 12)
        
        if (-not [string]::IsNullOrWhiteSpace($dateTakenRaw)) {
            # 날짜 형식 정제 (숫자 이외의 문자 제거 후 날짜만 추출)
            $cleanDate = ($dateTakenRaw -replace '[^0-9\-\. :]', '').Trim()
            try {
                # 날짜 형식에 따라 변환 시도
                $dateFolder = (Get-Date $cleanDate).ToString("yyyy-MM-dd")
            } catch {
                $dateFolder = $file.LastWriteTime.ToString("yyyy-MM-dd")
            }
        } else {
            # EXIF 정보가 없는 경우 파일 수정일 기준
            $dateFolder = $file.LastWriteTime.ToString("yyyy-MM-dd")
        }
        $destDir = Join-Path -ChildPath $dateFolder -Path $targetPath
        # 폴더가 없으면 생성
        if (-not (Test-Path -Path $destDir)) {
            New-Item -Path $destDir -ItemType Directory | Out-Null
        }
        # 파일 이동
        Move-Item -Path $file.FullName -Destination $destDir -Force
        Write-Host "[이동 완료] $($file.Name) -> $dateFolder" -ForegroundColor Gray
    }
}
Write-Host "`n--- 모든 작업이 완료되었습니다! ---" -ForegroundColor Green
Pause</code></pre>

카메라 자체적으로 제공하는 폴더 넘버링 형식(123YYYYMMDD)에 불만이 없다면 그대로 사용하시면 된다. 어쨌든 저런 방식도 탐색기나 편집 S/W에서 날짜순 정렬이 가능하다. 다만 이 스크립트는 본인처럼 최대한 간결하면서 직관적인 폴더 구조를 유지하고 싶은 사람만 사용하면 될듯 하다. 디테일의 차이라고 할까. 🙂

  1. FTP(File Transfer Protocol) ↩︎
  2. Tethering. 단어 뜻 그대로 카메라와 PC 또는 스마트폰을 연결해서 촬영하는 방식. 대화면으로 실시간 영상을 보면서 촬영하고 촬영 즉시 PC로 파일이 전송되어 편집할수 있어 전문가들이 많이 사용한다. ↩︎
  3. 107-210328 이런 형태가 된다. ↩︎

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다