O rsync com --iconv seria uma opção, mas primeiro você precisa definir uma codificação em que ? , : e outros sejam codificados com caracteres permitidos nos sistemas de arquivos FAT.
Para o seu caso de uso, você não está usando todo o poder do rsync para isso. Esta tarefa pode ser feita em algumas linhas de script de shell.
Este é um script básico que copia ~/Music para /media/usb99 , ignorando arquivos mais antigos no destino e converte : e ? em _ . Ele não detecta conflitos (suponho que você não tenha os dois foo:bar.mp3 e foo?bar.mp3 ).
#!/bin/bash
set -e
shopt -s dotglob globstar
cd ~/Music
for source in **/*; do
target=/media/usb99/${source#"$HOME"/}
target=${target//[:?]/_}
if [[ -d $source ]]; then
mkdir -p -- "$target"
elif [[ $target -ot $source ]]; then
cp -p -- "$source" "$target"
fi
done
Este script funciona em zsh com pequenas modificações: substitua shopt -s dotglob globstar por setopt dot_glob e [[ $target -ot $source ]] por [[ ! -e $target || $target -ot $source ]] .