From a362d9373c5b7e19182b667f6e033f5f7d389aa1 Mon Sep 17 00:00:00 2001 From: Urban Date: Tue, 21 Oct 2025 18:19:00 +0200 Subject: [PATCH] added prefix ignore --- videocmp_select.sh | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/videocmp_select.sh b/videocmp_select.sh index f00f9f0..53b2ee8 100755 --- a/videocmp_select.sh +++ b/videocmp_select.sh @@ -72,6 +72,9 @@ DATESTAMP=$(date +%y%m%d) LOG_DIR="$HOME/log" LOG_FILE="$LOG_DIR/videocmp_select.${DATESTAMP}.log" +# Add to defaults section +IGNORE_PATTERN="" + # -------- helpers -------- need() { command -v "$1" >/dev/null 2>&1 || { echo "Missing dependency: $1" >&2; exit 3; }; } v() { [[ $VERBOSE -eq 1 ]] && echo "[LOG]" "$@" >&2; } @@ -123,6 +126,7 @@ while (( i < ${#ARGS[@]} )); do fi ;; --recursive|-r) RECURSIVE=1; i=$((i+1));; + --ignore-prefix) IGNORE_PATTERN="${ARGS[i+1]:-}"; i=$((i+2));; --help|-h) grep -E '^# ' "$0" | sed 's/^# //' ; exit 0 ;; *) @@ -288,19 +292,52 @@ same_movie_or_skip() { # A B -> 0 if same (SSIM>=thr), else 1 } # ----- directory scan helpers/drivers ----- +#scan_and_collect() { +# if [[ $RECURSIVE -eq 1 ]]; then +# mapfile -t FILES < <(find "$SCAN_DIR" -type f \( -iname '*.mp4' -o -iname '*.m4v' -o -iname '*.mov' -o -iname '*.mkv' \)) +# else +# mapfile -t FILES < <(find "$SCAN_DIR" -maxdepth 1 -type f \( -iname '*.mp4' -o -iname '*.m4v' -o -iname '*.mov' -o -iname '*.mkv' \)) +# fi +#} + scan_and_collect() { if [[ $RECURSIVE -eq 1 ]]; then - mapfile -t FILES < <(find "$SCAN_DIR" -type f \( -iname '*.mp4' -o -iname '*.m4v' -o -iname '*.mov' -o -iname '*.mkv' \)) + mapfile -t FILES < <(find "$SCAN_DIR" -type f \( -iname '*.mp4' -o -iname '*.m4v' -o -iname '*.mov' -o -iname '*.mkv' \) ! -name '._*') else - mapfile -t FILES < <(find "$SCAN_DIR" -maxdepth 1 -type f \( -iname '*.mp4' -o -iname '*.m4v' -o -iname '*.mov' -o -iname '*.mkv' \)) + mapfile -t FILES < <(find "$SCAN_DIR" -maxdepth 1 -type f \( -iname '*.mp4' -o -iname '*.m4v' -o -iname '*.mov' -o -iname '*.mkv' \) ! -name '._*') fi } # key = first token of basename (without extension) before the first underscore; lowercased +#first_underscore_key() { +# local base extless key +# base="$(basename -- "$1")" +# extless="${base%.*}" +# if [[ "$extless" == *_* ]]; then +# key="${extless%%_*}" +# else +# key="$extless" +# fi +# echo "${key,,}" +#} + first_underscore_key() { local base extless key base="$(basename -- "$1")" extless="${base%.*}" + + # Strip ignore pattern if specified + if [[ -n "$IGNORE_PATTERN" ]]; then + # Convert pattern to regex: idx* becomes idx[0-9]+ + local pattern="$IGNORE_PATTERN" + pattern="${pattern//\*/[0-9]+}" # Replace * with [0-9]+ + + if [[ "$extless" =~ ^${pattern}_ ]]; then + # Remove the matched prefix and underscore + extless="${extless#"${BASH_REMATCH[0]}"}" + fi + fi + if [[ "$extless" == *_* ]]; then key="${extless%%_*}" else