first commit
This commit is contained in:
155
wunf_upd_prefix.sh
Executable file
155
wunf_upd_prefix.sh
Executable file
@ -0,0 +1,155 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
CSV_DEFAULT="wunf_scenes.csv"
|
||||
|
||||
usage() {
|
||||
echo "Användning:"
|
||||
echo " $0 <filnamn> [csv-fil]"
|
||||
echo " $0 --all <katalog> [csv-fil]"
|
||||
echo " $0 --list <textfil> [csv-fil] # en väg per rad"
|
||||
echo " ls -1 --quoting-style=literal \[WUNF\]_*.mp4 > filenames.txt && ./script/wunf_upd_prefix.sh --list filenames.txt wunf_scenes.csv && rm filenames.txt"
|
||||
exit 1
|
||||
}
|
||||
|
||||
rename_file() {
|
||||
local FILE="$1"
|
||||
local CSV="$2"
|
||||
|
||||
local base dir rest first second remainder name code code_us newbase newpath
|
||||
|
||||
if [[ ! -f "$FILE" ]]; then
|
||||
echo "Fel: Filen finns inte: $FILE" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
base="$(basename -- "$FILE")"
|
||||
dir="$(dirname -- "$FILE")"
|
||||
|
||||
# Kontrollera prefix
|
||||
if [[ "$base" != "[WUNF]"* ]]; then
|
||||
echo "Hoppar över (ej [WUNF]-prefix): $base" >&2
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Plocka ut allt efter prefixet [WUNF]_
|
||||
rest="${base#"[WUNF]"}"
|
||||
rest="${rest#_}"
|
||||
|
||||
IFS='_' read -r first second remainder <<< "$rest"
|
||||
|
||||
if [[ -z "${first:-}" || -z "${second:-}" ]]; then
|
||||
echo "Fel: Kunde inte extrahera två namn-delar i: $base" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Namn = två första token, med '_' -> ' '
|
||||
name="${first//_/ } ${second//_/ }"
|
||||
name="$(printf '%s' "$name" | sed -E 's/^[[:space:]]+|[[:space:]]+$//g')"
|
||||
|
||||
# slå upp i CSV (format Namn;Kod;Tid)
|
||||
code="$(
|
||||
awk -F';' -v target="$name" '
|
||||
BEGIN{IGNORECASE=1}
|
||||
{
|
||||
n=$1; gsub(/^[ \t]+|[ \t]+$/, "", n);
|
||||
if (n==target) {
|
||||
c=$2; gsub(/^[ \t]+|[ \t]+$/, "", c);
|
||||
print c; exit
|
||||
}
|
||||
}' "$CSV"
|
||||
)"
|
||||
|
||||
if [[ -z "$code" ]]; then
|
||||
echo "Ingen kod för \"$name\" hittades i $CSV (fil: $base)" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
code_us="${code// /_}"
|
||||
|
||||
newbase="$(printf '%s' "$base" | sed -E "s/^\[WUNF\]/[$code_us]/")"
|
||||
newpath="$dir/$newbase"
|
||||
|
||||
if [[ "$base" == "$newbase" ]]; then
|
||||
echo "Hoppar över (redan rätt namn): $base" >&2
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ -e "$newpath" ]]; then
|
||||
echo "Fel: Målfilen finns redan: $newpath" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
mv -- "$dir/$base" "$newpath"
|
||||
echo "Bytt namn:"
|
||||
echo " Från: $base"
|
||||
echo " Till: $newbase"
|
||||
}
|
||||
|
||||
### Huvudprogram
|
||||
if [[ $# -lt 1 ]]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
mode="$1"
|
||||
|
||||
case "$mode" in
|
||||
--all)
|
||||
if [[ $# -lt 2 ]]; then usage; fi
|
||||
DIR="$2"
|
||||
CSV="${3:-$CSV_DEFAULT}"
|
||||
|
||||
if [[ ! -d "$DIR" ]]; then
|
||||
echo "Fel: Katalog finns inte: $DIR" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ ! -f "$CSV" ]]; then
|
||||
echo "Fel: CSV-filen finns inte: $CSV" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
shopt -s nullglob
|
||||
for f in "$DIR"/\[WUNF\]*.mp4; do
|
||||
rename_file "$f" "$CSV" || true
|
||||
done
|
||||
;;
|
||||
|
||||
--list)
|
||||
if [[ $# -lt 2 ]]; then usage; fi
|
||||
LIST="$2"
|
||||
CSV="${3:-$CSV_DEFAULT}"
|
||||
|
||||
if [[ ! -f "$LIST" ]]; then
|
||||
echo "Fel: Textfil finns inte: $LIST" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ ! -f "$CSV" ]]; then
|
||||
echo "Fel: CSV-filen finns inte: $CSV" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Läs en rad i taget; ignorera tomma rader och kommentarer
|
||||
# Hanterar vägar med mellanslag korrekt
|
||||
while IFS= read -r line || [[ -n "$line" ]]; do
|
||||
# Trim CR (om filen är CRLF)
|
||||
line="${line%$'\r'}"
|
||||
# Trim whitespace runt
|
||||
trimmed="$(printf '%s' "$line" | sed -E 's/^[[:space:]]+|[[:space:]]+$//g')"
|
||||
# Hoppa över tomma rader och kommentarer
|
||||
[[ -z "$trimmed" || "$trimmed" =~ ^# ]] && continue
|
||||
rename_file "$trimmed" "$CSV" || true
|
||||
done < "$LIST"
|
||||
;;
|
||||
|
||||
*)
|
||||
FILE="$mode"
|
||||
CSV="${2:-$CSV_DEFAULT}"
|
||||
|
||||
if [[ ! -f "$CSV" ]]; then
|
||||
echo "Fel: CSV-filen finns inte: $CSV" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rename_file "$FILE" "$CSV"
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user