81 lines
1.9 KiB
Bash
Executable File
81 lines
1.9 KiB
Bash
Executable File
#!/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"
|