#!/bin/bash set -e source="$HOME/kskcloud/Musik/" tmp="$HOME/Musik.tiny/" destination="$HOME/kskcloud/Musik.tiny/" placeholder="$destination/a" rm -rf "$tmp" mkdir "$tmp" mkdir -p "$destination" # create a placeholder to prevent * from failing touch "$placeholder" # copy original target files and existing files as cache echo 'copying . . .' cp -a --reflink=always "$source/"* "$destination/"* "$tmp" # compress with opus; +e because ffmpeg errors on .jpg, .txt, etc. echo 'compressing . . .' set +e find "$tmp" -type f -not -name '*.opus' | parallel --eta --progress 'ffmpeg -v 0 -n -i ""{}"" -c:a libopus -map_metadata 0 -b:a 128k ""{.}.opus""' set -e # delete all non-opus files echo 'deleting . . .' find "$tmp" -type f -not -name '*.opus' -delete # copy compressed files to target destination cp -a --reflink=always "$tmp/"* "$destination" rm -r "$tmp"