하위 디렉토리의 파일 개수 및 용량 조사하는 프로그램입니다.
py 파일 생성 후 디렉토리 지정하여 실행하면 directory_stats.csv 로 만들어 집니다.
# vi dir_stats.py
import os
import csv
import sys
from datetime import datetime
def get_dir_file_stats(base_path):
dir_stats = []
for root, dirs, files in reversed(list(os.walk(base_path))):
file_count = len(files)
total_size = 0
for f in files:
try:
fp = os.path.join(root, f)
total_size += os.path.getsize(fp)
except OSError:
pass
for d in dirs:
sub_dir = os.path.join(root, d)
sub_stats = next((item for item in dir_stats if item[0] == sub_dir), None)
if sub_stats:
file_count += sub_stats[1]
total_size += sub_stats[2]
dir_stats.append((root, file_count, total_size))
dir_stats.sort(key=lambda x: x[0].count(os.sep))
return dir_stats
def save_to_csv_with_times(stats, output_file, start_time, end_time):
with open(output_file, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(["시작시간", start_time.strftime("%Y-%m-%d %H:%M:%S")])
writer.writerow(["종료시간", end_time.strftime("%Y-%m-%d %H:%M:%S")])
writer.writerow([])
writer.writerow(["경로", "파일개수", "용량(bytes)"])
for row in stats:
writer.writerow(row)
if __name__ == "__main__":
if len(sys.argv) > 1:
base_dir = sys.argv[1]
else:
base_dir = input("탐색할 기본 디렉토리 경로를 입력하세요 (기본 현재 디렉토리): ").strip()
if not base_dir:
base_dir = "."
start_time = datetime.now()
stats = get_dir_file_stats(base_dir)
end_time = datetime.now()
output_file = "directory_stats.csv"
save_to_csv_with_times(stats, output_file, start_time, end_time)
print(f"결과가 '{output_file}' 파일로 저장되었습니다.")
# nohup python dir_stats.py 디렉토리 &