운영체제별 숨김 파일 판별 방식
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일 경우에만win32api와win32con모듈을 불러옵니다. - Windows 판별 로직:
win32api.GetFileAttributes()로 파일 속성 값을 가져온 뒤, 비트 연산자(&)를 사용해FILE_ATTRIBUTE_HIDDEN(숨김) 또는FILE_ATTRIBUTE_SYSTEM(시스템) 속성이 설정되어 있는지 검사합니다. - Unix/macOS 판별 로직: 파일이나 폴더 이름이 마침표로 시작하는지 확인합니다.
- 파일 삭제: 리스트 컴프리헨션을 통해 현재 디렉터리(
'.')의 항목 중 숨김으로 판별된 파일들을os.remove()로 일괄 삭제합니다.
실행 시 주의 사항
Windows 환경에서 이 코드를 실행하려면 pywin32 패키지가 사전에 설치되어 있어야 합니다. 다음 명령으로 설치할 수 있습니다.
pip install pywin32
또한 os.remove()는 파일에만 적용되므로, 숨겨진 폴더까지 함께 삭제하려면 shutil.rmtree()를 사용하는 것이 좋습니다. 실수로 중요한 시스템 파일을 삭제하지 않도록, 삭제 전 대상 목록을 출력해 확인하는 절차를 추가하는 것도 안전한 방법입니다.