본문 바로가기
카테고리 없음

폴더 자동 정리하기: 확장자·날짜별로 파일을 자동 분류하는 방법

by danie 2026. 9. 3.

폴더 자동 정리하기: 확장자·날짜별로 파일을 자동 분류하는 방법

파일이 늘어나기 시작하면 수동 정리는 금방 한계가 옵니다. 이럴 때는 파일의 **확장자**를 기준으로 폴더를 나누거나, **날짜 기준**으로 묶는 자동 정리 스크립트를 쓰는 방식이 실용적입니다. 아래에서는 Python과 PowerShell로 구현하는 기본 흐름을 정리하고, 함께 확인해야 할 운영체제별 주의점도 덧붙입니다.

1) 가장 먼저 정할 것: 어떤 기준으로 나눌지

확장자 기준 정리는 비교적 단순합니다. 예를 들어 `jpg`, `png`, `pdf`, `txt`처럼 파일 확장자를 읽어 같은 종류끼리 폴더로 모읍니다. Python에서는 `pathlib`의 `Path`로 경로를 다루고 `suffix`로 확장자를 확인할 수 있습니다. PowerShell에서는 FileSystem provider를 통해 파일과 디렉터리에 접근하고 `Get-ChildItem`, `Move-Item`, `New-Item` 같은 명령으로 파일을 열거, 이동, 생성할 수 있습니다. 출처 출처

날짜 기준 정리는 추가로 기준일이 필요합니다. 여기서 중요한 점은, 어떤 날짜를 쓸지 **명시해야 한다는 것**입니다. 예를 들어 수정일, 생성일, 또는 메타데이터 중 무엇을 기준으로 분류할지 먼저 정해두는 편이 안전합니다. 이 부분은 구현 선택사항이므로, 스크립트에서 기준을 분명히 적어두는 방식이 좋습니다. 출처 출처

2) Python으로 확장자별 자동 정리하기

Python 쪽 핵심은 `pathlib`입니다. `Path` 객체로 파일 경로를 다루고, `suffix`로 확장자를 확인한 뒤, 같은 확장자끼리 목적지 폴더로 옮기면 됩니다. 출처

예시 흐름

1. 대상 폴더를 순회한다.

2. 각 파일의 확장자를 읽는다.

3. 확장자 이름의 폴더를 만든다.

4. 파일을 해당 폴더로 이동한다.

이 방식은 `jpg` 파일은 `jpg/`, `pdf` 파일은 `pdf/`처럼 단순한 규칙으로 정리할 때 특히 적합합니다. 출처

예시 코드

```python

from pathlib import Path

import shutil

source_dir = Path(r"C:\Downloads")

for item in source_dir.iterdir():

if item.is_file():

ext = item.suffix.lower().lstrip('.') or 'no_extension'

target_dir = source_dir / ext

target_dir.mkdir(exist_ok=True)

shutil.move(str(item), str(target_dir / item.name))

```

이 예시는 `suffix`로 확장자를 읽고, 확장자명 폴더를 만든 뒤 파일을 이동하는 기본 패턴입니다. `pathlib`는 파일시스템 I/O에 쓰이는 표준 라이브러리이므로, 경로 처리와 파일 분류 로직을 함께 구성하기 좋습니다. 출처

체크 포인트

  • 확장자가 없는 파일은 `no_extension` 같은 예외 폴더로 보내는 편이 관리하기 쉽습니다. 이건 구현 선택입니다. [출처](https://docs.python.org/3.12/library/pathlib.html)
  • 대소문자 섞임을 피하려면 `lower()`처럼 정규화하는 방식이 유용합니다. 다만 운영체제별 대소문자 처리 차이는 아래 주의사항에서 다시 확인하는 것이 좋습니다. [출처](https://learn.microsoft.com/en-us/powershell/scripting/whats-new/unix-support?view=powershell-7.6)

3) PowerShell로 파일 자동 정리하기

PowerShell에서는 FileSystem provider를 활용해 파일과 폴더를 다룹니다. `Get-ChildItem`으로 파일을 나열하고, `New-Item`으로 폴더를 만든 뒤, `Move-Item`으로 이동시키는 방식이 기본입니다. 출처

예시 흐름

1. `Get-ChildItem`으로 대상 폴더의 파일을 읽는다.

2. 각 파일의 확장자를 기준으로 폴더명을 정한다.

3. `New-Item`으로 폴더가 없으면 만든다.

4. `Move-Item`으로 파일을 옮긴다.

예시 코드

```powershell

$source = "C:\Downloads"

Get-ChildItem -Path $source -File | ForEach-Object {

$ext = if ($_.Extension) { $_.Extension.TrimStart('.').ToLower() } else { 'no_extension' }

$target = Join-Path $source $ext

if (-not (Test-Path $target)) {

New-Item -ItemType Directory -Path $target | Out-Null

}

Move-Item -Path $_.FullName -Destination $target

}

```

이 구조는 확장자별 자동 분류의 기본형입니다. PowerShell의 FileSystem provider는 파일 열거, 이동, 생성 작업에 맞게 구성되어 있습니다. 출처

4) 날짜별 정리를 넣고 싶다면

날짜 기준 정리는 가능하지만, 어떤 날짜를 쓸지 먼저 정해야 합니다. 예를 들어 `2026/09`처럼 연도-월 폴더로 분리할지, `2026-09-02`처럼 일자까지 나눌지 정해야 합니다. 이건 단순한 구현 문제가 아니라 **정책 문제**이기도 합니다. 출처 출처

추천하는 정리 방식

  • **확장자 우선, 날짜 보조**: `jpg/2026-09/`처럼 두 단계로 나누기
  • **날짜 우선, 확장자 보조**: `2026-09/jpg/`처럼 보관 구조를 만들기
  • **단일 기준만 사용**: 처음에는 하나의 기준으로 단순하게 시작하기

이런 방식은 문서, 이미지, 압축파일처럼 섞여 있는 다운로드 폴더에 특히 잘 맞습니다. 다만 날짜 기준으로 분류할 때는 사용한 날짜 필드를 스크립트에 분명히 적어두는 편이 좋습니다. 출처 출처

5) 자동 정리 스크립트에서 꼭 확인할 주의점

Windows 경로와 이름 제약

Windows 파일 이름과 경로에는 길이 및 레거시 명명 제약이 있습니다. 따라서 자동으로 폴더명을 만들 때는 너무 긴 이름, 금지 문자, 예상치 못한 접두어/구조를 피하도록 설계해야 합니다. 출처

Unix 계열에서의 대소문자 처리

PowerShell은 Unix 계열 환경에서도 동작하지만, Linux/macOS 파일시스템의 대체로 대소문자를 구분하는 특성을 따릅니다. 그래서 `JPG`와 `jpg`를 같은 폴더로 묶고 싶다면, 스크립트 쪽에서 소문자 정규화를 해두는 편이 좋습니다. 출처

덮어쓰기와 중복 파일

이 부분은 구현 방식에 따라 달라집니다. 같은 이름의 파일이 이미 대상 폴더에 있을 수 있으므로, 덮어쓰기인지, 이름 변경인지, 건너뛰기인지 정책을 정해 두는 것이 안전합니다. 이건 연구 결과에서 특정 동작이 확정되지 않았으므로, 실제 적용 전 검증이 필요합니다.

6) 실전에서는 이렇게 시작하면 좋다

가장 무난한 순서는 다음과 같습니다.

1. 먼저 **확장자별 분류만** 구현한다.

2. 그다음 필요하면 **날짜별 하위 폴더**를 추가한다.

3. Windows와 Unix 계열에서 **폴더명 규칙**을 점검한다.

4. 실제 파일에 적용하기 전에 작은 테스트 폴더에서 먼저 실행한다.

이 순서가 좋은 이유는, 확장자 분류는 `pathlib`나 PowerShell FileSystem provider의 기본 기능만으로도 시작할 수 있고, 날짜 기준은 어떤 필드를 쓸지 선택이 필요하기 때문입니다. 출처 출처

정리

폴더 자동 정리는 생각보다 단순하게 시작할 수 있습니다. Python에서는 `pathlib`의 `Path`와 `suffix`가 핵심이고, PowerShell에서는 FileSystem provider와 `Get-ChildItem`, `Move-Item`, `New-Item` 조합이 기본입니다. 다만 날짜 기준을 넣을 때는 어떤 날짜를 쓰는지 명시해야 하고, Windows 이름 규칙과 Unix 계열의 대소문자 처리 차이도 함께 고려해야 합니다. 출처 출처 출처 출처

원한다면 다음 단계로는 **Python 버전만 따로**, 또는 **PowerShell 버전만 따로** 바로 실행 가능한 완성본으로 정리해드릴 수 있습니다.