import os
import shutil
import logging
import datetime
# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def backup_files(source_dir, backup_dir):
"""
Backs up files from the source directory to the backup directory.
Logs errors if any occur.
"""
try:
# Create backup directory if it doesn't exist
if not os.path.exists(backup_dir):
os.makedirs(backup_dir)
# Get current timestamp for backup directory name
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
backup_subdir = os.path.join(backup_dir, timestamp)
os.makedirs(backup_subdir)
# Iterate through files in source directory
for root, _, files in os.walk(source_dir):
for file in files:
source_path = os.path.join(root, file)
relative_path = os.path.relpath(source_path, source_dir)
backup_path = os.path.join(backup_subdir, relative_path)
try:
# Create destination directory if needed
os.makedirs(os.path.dirname(backup_path), exist_ok=True)
# Copy the file
shutil.copy2(source_path, backup_path) #copy2 preserves metadata
logging.info(f"Successfully backed up: {source_path} to {backup_path}")
except Exception as e:
logging.error(f"Error backing up {source_path}: {e}")
except Exception as e:
logging.error(f"An error occurred: {e}")
if __name__ == "__main__":
# Example usage
source_directory = "/path/to/source/directory" # Replace with your source directory
backup_directory = "/path/to/backup/directory" # Replace with your backup directory
backup_files(source_directory, backup_directory)
Add your comment