jade_organisation/media/__init__.sh

109 lines
3.7 KiB
Bash

#!/bin/bash
# Define variables
DUPLICATE_LIST="duplicates.txt" # Hard-coded duplicate list file
LOG_FILE="deleted_duplicates.log" # Main log file
TIME_LOG_FILE="deletion_times.log" # Secondary log file to track deletion time
OUTPUT_LOG_FILE="output.log" # Third log file for terminal output
SAVED_SPACE_LOG_FILE="saved_space.log" # Log file for saved space
ERROR_LOG_FILE="error.log" # Log file for errors
DRY_RUN=false # Set to true to simulate actions
CONFIRM=false # Set to true to enable confirmation before deletion
# Function to display usage
usage() {
echo "Usage: $0 [--dry-run] [--confirm]"
echo " --dry-run Simulate the file removal process."
echo " --confirm Ask for confirmation before each delete."
exit 1
}
# Parse optional flags
for arg in "$@"; do
case $arg in
--dry-run)
DRY_RUN=true
shift
;;
--confirm)
CONFIRM=true
shift
;;
*)
;;
esac
done
# Create or clear the log files
: > "$LOG_FILE"
: > "$TIME_LOG_FILE"
: > "$OUTPUT_LOG_FILE"
: > "$SAVED_SPACE_LOG_FILE"
: > "$ERROR_LOG_FILE" # Clear the error log file
# Initialize counters and total saved space
total_files_processed=0
total_files_deleted=0
total_files_skipped=0
total_saved_bytes=0
# Iterate over each duplicate file path in the list
while IFS= read -r file_path; do
total_files_processed=$((total_files_processed + 1))
if [ -f "$file_path" ]; then
# Show a confirmation prompt (if enabled)
if [ "$CONFIRM" = true ]; then
read -p "Delete $file_path? (y/n) " response
if [[ "$response" != "y" ]]; then
echo "Skipped: $file_path" | tee -a "$LOG_FILE" "$OUTPUT_LOG_FILE"
total_files_skipped=$((total_files_skipped + 1))
continue
fi
fi
# Get the size of the file before deletion
file_size=$(stat -c%s "$file_path")
total_saved_bytes=$((total_saved_bytes + file_size))
# Time the deletion or moving process
start_time=$(date +%s%3N)
# Check if we're in dry run mode
if [ "$DRY_RUN" = true ]; then
echo "[Dry Run] Would delete: $file_path (Size: $file_size bytes)" | tee -a "$LOG_FILE" "$OUTPUT_LOG_FILE"
else
# Attempt to move the file
if mv "$file_path" "$BACKUP_DIR/"; then
echo "Moved: $file_path" | tee -a "$LOG_FILE" "$OUTPUT_LOG_FILE"
total_files_deleted=$((total_files_deleted + 1))
else
echo "Error moving file: $file_path" | tee -a "$ERROR_LOG_FILE"
fi
fi
end_time=$(date +%s%3N)
duration=$((end_time - start_time))
# Log the time taken to the secondary log file
echo "File: $file_path | Time: ${duration}ms" >> "$TIME_LOG_FILE"
else
echo "File not found: $file_path" | tee -a "$LOG_FILE" "$OUTPUT_LOG_FILE"
total_files_skipped=$((total_files_skipped + 1))
fi
done < "$DUPLICATE_LIST"
# Convert total saved bytes to human-readable format
human_readable_size=$(numfmt --to=iec-i --suffix=B $total_saved_bytes)
# Log the total saved space in both formats
echo "Total space saved: $total_saved_bytes bytes ($human_readable_size)" | tee -a "$SAVED_SPACE_LOG_FILE" "$OUTPUT_LOG_FILE"
# Summary Report
echo "----- Summary Report -----" | tee -a "$OUTPUT_LOG_FILE"
echo "Total files processed: $total_files_processed" | tee -a "$OUTPUT_LOG_FILE"
echo "Total files deleted: $total_files_deleted" | tee -a "$OUTPUT_LOG_FILE"
echo "Total files skipped: $total_files_skipped" | tee -a "$OUTPUT_LOG_FILE"
echo "Duplicate removal process completed. See $LOG_FILE, $TIME_LOG_FILE, $OUTPUT_LOG_FILE, $SAVED_SPACE_LOG_FILE, and $ERROR_LOG_FILE for details."