[파이썬] shutil 디렉토리 별 파일 정렬 및 관리 전략

Python의 shutil 모듈은 파일 및 디렉토리 작업을 지원하는 유용한 기능을 제공합니다. 이 모듈을 사용하여 파일을 복사하거나 이동시키는 것은 간단하지만, 특정 디렉토리 내의 파일을 효율적으로 정렬하고 관리하는 전략을 구현하는 것은 조금 더 복잡할 수 있습니다.

이 블로그 포스트에서는 shutil 모듈과 몇 가지 Python 기능을 활용하여 디렉토리 별 파일 정렬 및 관리 전략을 구현하는 방법을 살펴보겠습니다.

1. 디렉토리 탐색

정렬 및 관리 전략을 구현하기 전에, 우선 디렉토리 내의 파일을 탐색해야 합니다. 이를 위해 os.walk() 함수를 사용할 수 있습니다.

import os

def get_files(directory):
    file_list = []
    
    for root, dirs, files in os.walk(directory):
        for file in files:
            file_list.append(os.path.join(root, file))
    
    return file_list
    
files = get_files('/path/to/directory')

get_files() 함수는 지정된 디렉토리에서 모든 파일의 경로를 가져와 리스트로 반환합니다.

2. 파일 분류 및 이동

파일을 분류하여 특정 디렉토리로 이동하는 방법을 알아보겠습니다. 예를 들어, 확장자별로 파일을 분류하여 서로 다른 디렉토리로 이동할 수 있습니다.

import os
import shutil

def move_files(files, destination_directory):
    for file in files:
        filename = os.path.basename(file)
        file_extension = os.path.splitext(filename)[1]
        
        destination = os.path.join(destination_directory, file_extension[1:])
        
        if not os.path.exists(destination):
            os.makedirs(destination)
        
        shutil.move(file, os.path.join(destination, filename))

move_files() 함수는 파일 목록과 대상 디렉토리를 입력받아, 파일의 확장자를 기준으로 파일을 분류하고 해당 디렉토리로 이동시킵니다. 이때, 대상 디렉토리가 존재하지 않는 경우에는 디렉토리를 생성합니다.

3. 파일 정렬 전략

파일을 생성일, 수정일, 파일 크기 등의 다양한 기준에 따라 정렬할 수 있습니다. 아래 예제에서는 파일 크기를 기준으로 파일을 정렬하는 방법을 보여줍니다.

import os
import shutil

def sort_files_by_size(directory):
    files = get_files(directory)
    
    sorted_files = sorted(files, key=lambda file: os.path.getsize(file))
    
    for index, file in enumerate(sorted_files):
        destination = os.path.join(directory, f'{index}{os.path.basename(file)}')
        shutil.move(file, destination)

sort_files_by_size() 함수는 디렉토리 내 모든 파일을 크기별로 정렬한 후, 파일 이름에 정렬된 인덱스를 추가하여 파일을 이동시킵니다. 이를 통해 파일을 크기별로 정렬된 순서대로 새로운 이름을 가진 파일로 이동시킬 수 있습니다.

마치며

shutil 모듈과 Python의 기능을 활용하여 디렉토리 별 파일 정렬 및 관리 전략을 구현하는 방법을 살펴보았습니다. 이러한 전략은 파일의 속성에 따라 파일을 정리하고 정돈하는데 유용하며, 다양한 복잡한 파일 작업을 자동화하는데 활용될 수 있습니다.

정렬 전략은 개발자의 필요에 따라 유연하게 구성할 수 있으며, 사용자 정의 함수와 조건문을 추가하여 더욱 다양한 작업을 수행할 수도 있습니다. 적절한 방법을 선택하여 파일 정리를 효율적으로 수행하세요.