Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 숨겨진 파일 및 폴더를 감지하고 삭제하는 방법

운영체제별 숨김 파일 판별 방식

Unix 계열 운영체제(macOS, Linux 등)에서는 숨겨진 파일과 폴더가 마침표(.)로 시작하는 것이 특징입니다. 따라서 문자열의 startswith() 메서드를 활용한 간단한 검사만으로도 숨김 항목을 쉽게 걸러낼 수 있습니다.

반면 Windows에서는 파일 이름이 아니라 파일 속성(File Attributes)을 직접 확인해야 합니다. Windows API가 제공하는 속성 정보를 읽어 해당 파일이나 폴더가 '숨김(Hidden)' 또는 '시스템(System)' 속성을 가지고 있는지 판별해야 정확하게 처리할 수 있습니다.

예제 코드

아래 코드를 사용하면 운영체제를 자동으로 구분하여, 현재 디렉터리에 있는 모든 숨겨진 파일을 삭제할 수 있습니다.

import os
if os.name == 'nt':
    import win32api, win32con

def file_is_hidden(p):
    if os.name == 'nt':
        attribute = win32api.GetFileAttributes(p)
        return attribute & (win32con.FILE_ATTRIBUTE_HIDDEN | win32con.FILE_ATTRIBUTE_SYSTEM)
    else:
        return p.startswith('.')  # linux-osx

[os.remove(f) for f in os.listdir('.') if file_is_hidden(f)]

코드 동작 원리

  • OS 구분: os.name == 'nt' 조건문으로 현재 실행 환경이 Windows인지 확인하고, Windows일 경우에만 win32apiwin32con 모듈을 불러옵니다.
  • Windows 판별 로직: win32api.GetFileAttributes()로 파일 속성 값을 가져온 뒤, 비트 연산자(&)를 사용해 FILE_ATTRIBUTE_HIDDEN(숨김) 또는 FILE_ATTRIBUTE_SYSTEM(시스템) 속성이 설정되어 있는지 검사합니다.
  • Unix/macOS 판별 로직: 파일이나 폴더 이름이 마침표로 시작하는지 확인합니다.
  • 파일 삭제: 리스트 컴프리헨션을 통해 현재 디렉터리('.')의 항목 중 숨김으로 판별된 파일들을 os.remove()로 일괄 삭제합니다.

실행 시 주의 사항

Windows 환경에서 이 코드를 실행하려면 pywin32 패키지가 사전에 설치되어 있어야 합니다. 다음 명령으로 설치할 수 있습니다.

pip install pywin32

또한 os.remove()는 파일에만 적용되므로, 숨겨진 폴더까지 함께 삭제하려면 shutil.rmtree()를 사용하는 것이 좋습니다. 실수로 중요한 시스템 파일을 삭제하지 않도록, 삭제 전 대상 목록을 출력해 확인하는 절차를 추가하는 것도 안전한 방법입니다.