[파이썬] shutil 파일 동기화 도구 만들기

파일을 동기화하는 일은 일상적인 개발과정 또는 데이터 백업에 필수적일 수 있습니다.

Python의 shutil 모듈은 파일 및 디렉토리 관리를 위한 다양한 유틸리티 기능을 제공합니다. 이번 기사에서는 shutil을 사용하여 파일 동기화 도구를 만들어 보겠습니다.

동기화 도구 개요

우리는 파일 동기화 도구를 개발하여 소스 디렉토리와 대상 디렉토리 간 파일의 동기화 기능을 제공할 것입니다. 동기화 도구는 소스 디렉토리에 있는 파일 중에 대상 디렉토리에 존재하지 않거나 변경된 파일을 찾아내고, 해당 파일들을 대상 디렉토리로 복사할 것입니다.

shutil을 이용한 파일 동기화 기능 구현

Python의 shutil 모듈을 이용하면 파일을 복사하고 디렉토리를 생성할 수 있습니다. 이를 이용하여 파일 동기화 기능을 구현해보겠습니다.

Step 1: 필요한 모듈 가져오기

import shutil
import os

Step 2: 소스 디렉토리와 대상 디렉토리 설정하기

source_dir = "/path/to/source/directory"
target_dir = "/path/to/target/directory"

Step 3: 동기화 함수 구현하기

def sync_directories(source_dir, target_dir):
    print("Syncing directories...")
    
    # 대상 디렉토리가 존재하지 않으면 생성합니다.
    if not os.path.exists(target_dir):
        os.makedirs(target_dir)
    
    # 소스 디렉토리 내의 모든 파일을 검사합니다.
    for root, dirs, files in os.walk(source_dir):
        
        # 대상 디렉토리 내에 있는 파일들과 비교합니다.
        for file in files:
            source_path = os.path.join(root, file)
            target_path = os.path.join(target_dir, root.replace(source_dir, ""), file)
            
            # 대상 디렉토리에 해당 파일이 존재하지 않거나 변경된 경우 파일을 복사합니다.
            if not os.path.exists(target_path) or \
                    (os.path.exists(target_path) and os.stat(source_path).st_mtime > os.stat(target_path).st_mtime):
                print(f"Copying {source_path} to {target_path}")
                shutil.copy2(source_path, target_path)

Step 4: 동기화 도구 실행하기

sync_directories(source_dir, target_dir)

이 코드를 실행하면 소스 디렉토리와 대상 디렉토리 간의 파일 동기화가 수행됩니다. 각 파일이 동기화될 때마다 해당 파일의 경로와 대상 디렉토리로의 복사 작업이 출력됩니다.

파일 동기화 도구 테스트

이제 만든 파일 동기화 도구를 테스트해봅시다. 소스 디렉토리에 새로운 파일을 생성하거나, 기존 파일을 수정한 후 동기화 도구를 실행해봅시다. 이때 동기화된 파일이 대상 디렉토리에 복사되는 것을 확인할 수 있습니다.

결론

Python의 shutil 모듈을 이용하여 파일 동기화 도구를 만들어보았습니다. 이 도구를 사용하면 개발 또는 데이터 백업 과정에서 파일을 효율적으로 동기화할 수 있습니다. shutil 외에도 Python에는 다양한 파일 관리 모듈이 있으므로 필요한 기능에 맞게 적절한 모듈을 선택하여 사용하면 좋습니다.