1. import os
  2. import shutil
  3. import logging
  4. import datetime
  5. # Configure logging
  6. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  7. def backup_files(source_dir, backup_dir):
  8. """
  9. Backs up files from the source directory to the backup directory.
  10. Logs errors if any occur.
  11. """
  12. try:
  13. # Create backup directory if it doesn't exist
  14. if not os.path.exists(backup_dir):
  15. os.makedirs(backup_dir)
  16. # Get current timestamp for backup directory name
  17. timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
  18. backup_subdir = os.path.join(backup_dir, timestamp)
  19. os.makedirs(backup_subdir)
  20. # Iterate through files in source directory
  21. for root, _, files in os.walk(source_dir):
  22. for file in files:
  23. source_path = os.path.join(root, file)
  24. relative_path = os.path.relpath(source_path, source_dir)
  25. backup_path = os.path.join(backup_subdir, relative_path)
  26. try:
  27. # Create destination directory if needed
  28. os.makedirs(os.path.dirname(backup_path), exist_ok=True)
  29. # Copy the file
  30. shutil.copy2(source_path, backup_path) #copy2 preserves metadata
  31. logging.info(f"Successfully backed up: {source_path} to {backup_path}")
  32. except Exception as e:
  33. logging.error(f"Error backing up {source_path}: {e}")
  34. except Exception as e:
  35. logging.error(f"An error occurred: {e}")
  36. if __name__ == "__main__":
  37. # Example usage
  38. source_directory = "/path/to/source/directory" # Replace with your source directory
  39. backup_directory = "/path/to/backup/directory" # Replace with your backup directory
  40. backup_files(source_directory, backup_directory)

Add your comment