55 lines
1.4 KiB
Bash
55 lines
1.4 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# ── File Processor Template ──
|
|
# Handles: input resolution, validation, file discovery, iteration, summary.
|
|
# The task only needs to define: EXTENSIONS and process_file().
|
|
#
|
|
# Slots to fill before this template:
|
|
# EXTENSIONS="flac|wav|ogg" — pipe-separated list of file extensions to match
|
|
# process_file() { ... } — receives $1 (input path), returns 0 on success
|
|
|
|
# ── Input resolution ──
|
|
TARGET="${1:-${INPUT_FILE_PATH:-}}"
|
|
|
|
if [[ -z "$TARGET" ]]; then
|
|
echo "Error: No file or directory path provided" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -e "$TARGET" ]]; then
|
|
echo "Error: Path does not exist: $TARGET" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# ── Execution ──
|
|
converted=0
|
|
failed=0
|
|
|
|
if [[ -f "$TARGET" ]]; then
|
|
if process_file "$TARGET"; then
|
|
converted=$((converted + 1))
|
|
else
|
|
failed=$((failed + 1))
|
|
fi
|
|
elif [[ -d "$TARGET" ]]; then
|
|
while IFS= read -r -d '' file; do
|
|
if process_file "$file"; then
|
|
converted=$((converted + 1))
|
|
else
|
|
failed=$((failed + 1))
|
|
fi
|
|
done < <(find "$TARGET" -type f -regextype posix-extended -iregex ".*\.($EXTENSIONS)" -print0 | sort -z)
|
|
|
|
if [[ $converted -eq 0 && $failed -eq 0 ]]; then
|
|
echo "No matching files found in: $TARGET"
|
|
exit 0
|
|
fi
|
|
else
|
|
echo "Error: Not a file or directory: $TARGET" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Summary: $converted processed, $failed failed"
|