#!/bin/bash LOG_DIR="/home/honney/.log" LOG_FILE="${LOG_DIR}/rename.log" mkdir -p "$LOG_DIR" reverse_mode=false if [[ "$1" == "reverse" ]]; then reverse_mode=true elif [[ -z "$1" ]]; then echo "Usage: $0 {start_number} | reverse" exit 1 fi if $reverse_mode; then if [[ ! -f "$LOG_FILE" ]]; then echo "No log file found. Nothing to reverse." exit 1 fi current_dir=$(realpath .) match_start=$(grep -n "=== $current_dir ===" "$LOG_FILE" | cut -d: -f1) if [[ -z "$match_start" ]]; then echo "No entries for this directory in the log." exit 1 fi sed -n "$((match_start + 1)),/^===/p" "$LOG_FILE" | grep -v "^===" | while IFS="|" read -r original renamed; do if [[ -e "$renamed" ]]; then mv -v "$renamed" "$original" else echo "Warning: '$renamed' not found. Skipping." fi done echo "Reversal complete." exit 0 fi # Start of normal renaming start_number=$1 counter=0 extensions=("mkv" "mp4" "avi" "mov" "jpg" "png") files=() for ext in "${extensions[@]}"; do while IFS= read -r -d '' file; do files+=("$file") done < <(find . -maxdepth 1 -type f -iname "*.${ext}" -print0) done IFS=$'\n' sorted_files=($(printf '%s\n' "${files[@]}" | sort -rz | tr '\0' '\n')) # Log the current session current_dir=$(realpath .) echo "=== $current_dir ===" >> "$LOG_FILE" for file in "${sorted_files[@]}"; do new_number=$(printf "%02d" $((start_number + counter))) extension="${file##*.}" base_name="E${new_number}" new_name="${base_name}.${extension}" suffix=1 # Avoid overwriting while [ -e "$new_name" ]; do new_name="${base_name}_$suffix.${extension}" ((suffix++)) done mv "$file" "$new_name" echo "${file}|${new_name}" >> "$LOG_FILE" ((counter++)) done echo "Renaming complete! Changes logged to $LOG_FILE"