SHA256
1
0

Initial commit

This commit is contained in:
2025-12-04 23:23:42 -05:00
commit 765f598313
58 changed files with 2736 additions and 0 deletions

68
scripts/sync-music Executable file
View File

@@ -0,0 +1,68 @@
#!/usr/bin/env bash
# Sync and transcode music files to a destination directory
set -e
SRC="${1:?Source directory required}"
DST="${2:?Destination directory required}"
JOBS="${3:-12}"
command -v opusenc >/dev/null || { echo "ERROR: opusenc not found" >&2; exit 1; }
mkdir -p "$DST"
echo "Syncing music from $SRC to $DST (using $JOBS parallel jobs)"
# Process source files in parallel
process_file() {
local src="$1"
local rel="${src#"$SRC/"}"
local dst="$DST/$rel"
case "${src,,}" in
*.flac)
dst="${dst%.*}.opus"
if [[ ! -f "$dst" || "$src" -nt "$dst" ]]; then
echo "Converting: $rel"
mkdir -p "$(dirname "$dst")"
opusenc --quiet --bitrate 160 --vbr "$src" "$dst"
fi
;;
*.mp3)
if [[ ! -f "$dst" || "$src" -nt "$dst" ]]; then
echo "Copying: $rel"
mkdir -p "$(dirname "$dst")"
cp -p "$src" "$dst"
fi
;;
esac
}
export -f process_file
export SRC DST
find -L "$SRC" -type f \( -iname "*.flac" -o -iname "*.mp3" \) -print0 | \
xargs -0 -P "$JOBS" -I {} bash -c 'process_file "$@"' _ {}
# Remove stray files
while IFS= read -r -d '' dst; do
rel="${dst#"$DST/"}"
base="${rel%.*}"
case "${dst,,}" in
*.opus)
[[ -f "$SRC/$base.flac" || -f "$SRC/$base.FLAC" ]] && continue
echo "Removing: $rel"
rm -f "$dst"
;;
*.mp3)
[[ -f "$SRC/$rel" ]] && continue
echo "Removing: $rel"
rm -f "$dst"
;;
esac
done < <(find -L "$DST" -type f \( -iname "*.opus" -o -iname "*.mp3" \) -print0)
# Clean empty directories
find "$DST" -type d -empty -delete 2>/dev/null || true
echo "Done"