ساخت اسکریپت برای پاکسازی فایلها با پایتون: اتوماسیون و اسکریپتنویسی
در دنیای دیجیتال امروز، مدیریت فایلها یکی از چالشهای اساسی برای کاربران و مدیران سیستم است. حجم بالای فایلها، فایلهای تکراری، فایلهای قدیمی و غیرضروری میتوانند فضای ذخیرهسازی را اشغال کرده و عملکرد سیستم را کاهش دهند. برای حل این مشکل، میتوان از اسکریپتهای اتوماسیون استفاده کرد که به طور خودکار فایلهای ناخواسته را شناسایی و حذف کنند. در این مقاله، به بررسی نحوه ساخت اسکریپتهای پاکسازی فایلها با استفاده از زبان برنامهنویسی پایتون میپردازیم. این آموزش در دسته ‘اتوماسیون و اسکریپتنویسی’ قرار میگیرد و برای افراد مبتدی تا متوسط در پایتون مناسب است.
مقدمهای بر اتوماسیون و اسکریپتنویسی
اتوماسیون به معنای انجام خودکار وظایف تکراری و زمانبر است. اسکریپتنویسی ابزاری قدرتمند برای اتوماسیون است که به ما امکان میدهد تا با نوشتن کدهای ساده، وظایف پیچیده را به طور خودکار انجام دهیم. پایتون به دلیل سادگی، خوانایی و کتابخانههای گسترده، یکی از محبوبترین زبانها برای اسکریپتنویسی است.
پیشنیازها
برای دنبال کردن این آموزش، به موارد زیر نیاز دارید:
- نصب پایتون: اطمینان حاصل کنید که پایتون بر روی سیستم شما نصب شده است.
- آشنایی با مفاهیم پایه پایتون: متغیرها، حلقهها، شرطها، توابع و ماژولها.
- دسترسی به سیستم فایل: شما باید دسترسی خواندن و نوشتن به دایرکتوریهایی که میخواهید پاکسازی کنید داشته باشید.
ماژولهای مورد نیاز
برای ساخت اسکریپت پاکسازی فایلها، از ماژولهای زیر استفاده خواهیم کرد:
os: این ماژول امکان تعامل با سیستم عامل را فراهم میکند، از جمله دسترسی به سیستم فایل، ایجاد و حذف دایرکتوریها و فایلها.time: این ماژول برای کار با زمان استفاده میشود، مانند بررسی تاریخ آخرین تغییر فایل.datetime: این ماژول برای کار با تاریخ و زمان به صورت شیءگرا استفاده میشود.shutil: این ماژول توابع سطح بالاتری برای عملیات فایل و دایرکتوری ارائه میدهد، مانند کپی کردن، حذف و آرشیو کردن فایلها.
ساخت اسکریپت پایه پاکسازی فایلها
در این بخش، یک اسکریپت پایه برای پاکسازی فایلها میسازیم که فایلهای قدیمیتر از یک تاریخ مشخص را حذف میکند.
import os
import time
import datetime
def delete_old_files(directory, days):
"""
فایلهای قدیمیتر از تعداد روز مشخص را از یک دایرکتوری حذف میکند.
Args:
directory (str): مسیر دایرکتوری مورد نظر.
days (int): تعداد روزهایی که فایلها باید قدیمیتر از آن باشند تا حذف شوند.
"""
now = datetime.datetime.now()
cutoff = now - datetime.timedelta(days=days)
for filename in os.listdir(directory):
filepath = os.path.join(directory, filename)
try:
if os.path.isfile(filepath):
file_modified_time = datetime.datetime.fromtimestamp(os.path.getmtime(filepath))
if file_modified_time < cutoff:
os.remove(filepath)
print(f"فایل {filename} حذف شد.")
except Exception as e:
print(f"خطا در پردازش فایل {filename}: {e}")
# مثال استفاده
directory_to_clean = "/path/to/your/directory" # مسیر دایرکتوری مورد نظر را جایگزین کنید
days_to_keep = 30 # فایلهای قدیمیتر از 30 روز حذف میشوند
delete_old_files(directory_to_clean, days_to_keep)
در این اسکریپت، تابع delete_old_files دو آرگومان میگیرد: directory که مسیر دایرکتوری مورد نظر را مشخص میکند و days که تعداد روزهایی را مشخص میکند که فایلها باید قدیمیتر از آن باشند تا حذف شوند. اسکریپت ابتدا تاریخ فعلی را به دست میآورد و سپس تاریخ cutoff را محاسبه میکند که تاریخ مورد نظر برای حذف فایلها است. سپس، اسکریپت تمام فایلهای موجود در دایرکتوری را بررسی میکند و اگر تاریخ آخرین تغییر فایل قدیمیتر از تاریخ cutoff باشد، فایل را حذف میکند.
بهبود اسکریپت: حذف فایلهای تکراری
علاوه بر حذف فایلهای قدیمی، میتوان اسکریپت را برای حذف فایلهای تکراری نیز بهبود بخشید. برای این کار، میتوان از هش (hash) فایلها استفاده کرد. دو فایل تکراری دارای هش یکسانی هستند.
import os
import hashlib
def delete_duplicate_files(directory):
"""
فایلهای تکراری را از یک دایرکتوری حذف میکند.
Args:
directory (str): مسیر دایرکتوری مورد نظر.
"""
file_hashes = {}
for filename in os.listdir(directory):
filepath = os.path.join(directory, filename)
try:
if os.path.isfile(filepath):
with open(filepath, "rb") as f:
file_hash = hashlib.md5(f.read()).hexdigest()
if file_hash in file_hashes:
os.remove(filepath)
print(f"فایل تکراری {filename} حذف شد.")
else:
file_hashes[file_hash] = filepath
except Exception as e:
print(f"خطا در پردازش فایل {filename}: {e}")
# مثال استفاده
directory_to_clean = "/path/to/your/directory" # مسیر دایرکتوری مورد نظر را جایگزین کنید
delete_duplicate_files(directory_to_clean)
در این اسکریپت، تابع delete_duplicate_files یک آرگومان میگیرد: directory که مسیر دایرکتوری مورد نظر را مشخص میکند. اسکریپت یک دیکشنری به نام file_hashes ایجاد میکند که کلید آن هش فایل و مقدار آن مسیر فایل است. سپس، اسکریپت تمام فایلهای موجود در دایرکتوری را بررسی میکند و هش هر فایل را محاسبه میکند. اگر هش فایل در دیکشنری file_hashes وجود داشته باشد، فایل تکراری است و حذف میشود. در غیر این صورت، هش فایل و مسیر فایل به دیکشنری اضافه میشوند.
بهبود اسکریپت: مدیریت خطاها و لاگگیری
برای افزایش قابلیت اطمینان اسکریپت، باید مدیریت خطاها و لاگگیری را به آن اضافه کنیم. این کار به ما کمک میکند تا در صورت بروز خطا، علت آن را شناسایی کنیم و اسکریپت را اصلاح کنیم. همچنین، لاگگیری به ما امکان میدهد تا تاریخچه عملیات پاکسازی را ثبت کنیم.
import os
import time
import datetime
import logging
# تنظیمات لاگگیری
logging.basicConfig(filename="cleanup.log", level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def delete_old_files(directory, days):
"""
فایلهای قدیمیتر از تعداد روز مشخص را از یک دایرکتوری حذف میکند و لاگ میگیرد.
Args:
directory (str): مسیر دایرکتوری مورد نظر.
days (int): تعداد روزهایی که فایلها باید قدیمیتر از آن باشند تا حذف شوند.
"""
now = datetime.datetime.now()
cutoff = now - datetime.timedelta(days=days)
for filename in os.listdir(directory):
filepath = os.path.join(directory, filename)
try:
if os.path.isfile(filepath):
file_modified_time = datetime.datetime.fromtimestamp(os.path.getmtime(filepath))
if file_modified_time < cutoff:
os.remove(filepath)
logging.info(f"فایل {filename} حذف شد.")
print(f"فایل {filename} حذف شد.")
except Exception as e:
logging.error(f"خطا در پردازش فایل {filename}: {e}")
print(f"خطا در پردازش فایل {filename}: {e}")
# مثال استفاده
directory_to_clean = "/path/to/your/directory" # مسیر دایرکتوری مورد نظر را جایگزین کنید
days_to_keep = 30 # فایلهای قدیمیتر از 30 روز حذف میشوند
delete_old_files(directory_to_clean, days_to_keep)
در این اسکریپت، ما از ماژول logging برای لاگگیری استفاده کردهایم. ما یک فایل لاگ به نام cleanup.log ایجاد کردهایم و تمام پیامهای لاگ را در آن ذخیره میکنیم. ما سطح لاگ را روی INFO تنظیم کردهایم، به این معنی که تمام پیامهای اطلاعاتی و خطاها در فایل لاگ ذخیره میشوند. در صورت بروز خطا، پیام خطا در فایل لاگ ثبت میشود و به کاربر نمایش داده میشود.
نتیجهگیری
در این مقاله، نحوه ساخت اسکریپتهای پاکسازی فایلها با استفاده از زبان برنامهنویسی پایتون را بررسی کردیم. ما یک اسکریپت پایه برای حذف فایلهای قدیمی ساختیم و سپس آن را برای حذف فایلهای تکراری و مدیریت خطاها بهبود بخشیدیم. با استفاده از این اسکریپتها، میتوانید فضای ذخیرهسازی سیستم خود را آزاد کنید و عملکرد آن را بهبود بخشید. اتوماسیون و اسکریپتنویسی ابزارهای قدرتمندی هستند که میتوانند به شما در مدیریت فایلها و انجام وظایف تکراری کمک کنند.

بدون دیدگاه