rsync apenas subdiretórios selecionados

4

Eu quero rsync uma parte da minha biblioteca de música de drive externo para o meu player de áudio.

Em geral, digamos, há um diretório $ source e $ target , e um arquivo de texto $ subdirs com uma lista de subdiretórios -diretório caminhos relativos a $ source dos quais eu quero exclusivamente (--delete) rsync para $ target preservando sua estrutura de árvore de diretório (--relative).

Meu código my_sync.sh se parece com:

rsync -rR --include-from=$subdirs --exclude="/*" --delete --delete-excluded $source/./ $target

O problema é, no entanto, isso só funciona para sub-dirs que são imediatamente localizados em $ source (/dir/*.mp3), enquanto que em sub-diretórios aninhados (ie / dir1 / dir2 / ...) estão sendo omitidos.

    
por David 27.07.2015 / 22:31

1 resposta

1

Eu criei a seguinte solução.

# exclude system created files like .DS_Store, desktop.ini...
arg="-C
"

# project each "$path" to "/$path/**" and concat 'em all
while read line || [[ -n $line ]]; do
    arg+="+ /$line/**
"
done < $subdirs

# */ - includes each folder so that rsync traverses the whole tree,
# *  - excludes everything else
arg+="+ */
- *"

# -m - excludes "empty" dirs that we used to traverse the tree
echo "$arg" | rsync -rmhvn -f ". -" --delete-excluded --info=PROGRESS2 --size-only $source/./ "$target"
    
por 28.07.2015 / 07:21

Tags