#!/bin/bash DRY_RUN=false DELETE=false while [[ $# -gt 0 ]]; do case "$1" in --dry-run) DRY_RUN=true shift ;; --delete) DELETE=true shift ;; *) break ;; esac done if [[ $# -ne 1 ]]; then echo "Usage: $0 [--dry-run] [--delete] file.txt" exit 1 fi list="$1" while IFS= read -r file; do [[ -z "$file" ]] && continue if [[ ! -e "$file" ]]; then echo "ERROR: Missing file: $file" exit 1 fi if [[ -d "$file" ]]; then echo "WARNING: Is a directory, skipping: $file" continue fi # Get comment from ID3v2 comment=$(kid3-cli "$file" \ -c "tag 2" \ -c "get comment" 2>/dev/null) [[ -z "$comment" ]] && continue echo echo "File: $file" echo "Comment: $comment" composer="" # Match: read by Name; text if [[ "$comment" =~ ^[Rr]ead[[:space:]]+[Bb]y[[:space:]]+([^;]+)\; ]]; then composer="${BASH_REMATCH[1]}" composer="$(echo "$composer" | sed 's/[[:space:]]*$//')" echo "Found narrator: $composer" if $DRY_RUN; then echo "DRY RUN: set composer '$composer', delete comment" else kid3-cli "$file" \ -c "tag 2" \ -c "set composer '$composer'" \ -c "set comment ''" \ -c save fi elif [[ ${#comment} -lt 40 ]]; then echo "Short comment (${#comment} chars): $comment" if $DELETE; then if $DRY_RUN; then echo "DRY RUN: delete comment" else kid3-cli "$file" \ -c "tag 2" \ -c "set comment ''" \ -c save fi fi fi done < "$list"