Aqui está a abordagem básica (consulte este guia de filtro do rsync para mais informações):
- inclua os arquivos na lista de reprodução;
- inclua todos os diretórios (caso contrário, nada seria copiado) e exclua tudo o mais;
- excluir arquivos não sincronizados e diretórios vazios
Assim (não testado):
rsync -a --include-from=/path/to/syncrel.m3u --include='*/' --exclude='*' \
--delete --delete-excluded --prune-empty-dirs \
/home/share/media/audio/ /media/sdg/MUSIC
Se os nomes dos seus arquivos contiverem um dos caracteres curinga *?[
, há uma complicação adicional. Você precisa preceder esses caracteres com uma barra invertida. E, se houver barras invertidas nos nomes de arquivos, você também precisará precedê-las com uma barra invertida, mas somente se houver outros curingas. Aqui está um snippet de sed para converter uma lista de nomes de arquivos para o formato esperado (você só precisa da primeira expressão se não houver barras invertidas nos nomes dos arquivos):
sed -e 's/[*?\[]/\&/g' -e 's/[*?[]/&/' -e T -e 's/\\/\/g'
No bash, ksh ou zsh, há uma maneira conveniente de filtrar a lista de arquivos antes de passá-la para o rsync:
rsync -a --include-from=<(</path/to/syncrel.m3u sed -e 's/[*?\[]/\&/g') \
--include='*/' --exclude='*' \
--delete --delete-excluded --prune-empty-dirs \
/home/share/media/audio/ /media/sdg/MUSIC