rsync não pode excluir diretórios

1

Eu corro este cmd para fazer backup de minhas pastas:

$ rsync -av --exclude {/mnt/dati/Film/, /mnt/dati/Scout/} --delete /mnt/dati/ /media/cirelli/HD1TB/backup/dati
sending incremental file list

E a resposta do rsync é:

rsync: link_stat "/mnt/dati/Scout/}" failed: No such file or directory (2)

mas o diretório "Scout" existe! Não consigo entender o que eu erro. Mesmo filme é copiado, mesmo que não haja nenhuma mensagem de erro! O que há de errado na minha execução do rsync?

Muito obrigado pessoal

(ah, eu li man link e exemplos link mas ainda encontrar alguma maneira de resolver ..!)

Eu também tentei (isso é interrompido por CTRL + C):

cirelli@asus:~$ rsync -av --exclude /mnt/dati/Film/ --exclude /mnt/dati/.Trash-1000/ --delete /mnt/dati/ /media/cirelli/HD1TB/backup/dati
sending incremental file list
deleting Documenti/script/
rsync: readlink_stat("/media/cirelli/HD1TB/backup/dati/Documenti/RPi/.2015-05-05-raspbian-wheezy.zip.2sXers") failed: Input/output error (5)
deleting Documenti/RPi/KODI/
deleting Documenti/RPi/berryboot-20130908.zip
deleting Documenti/RPi/2015-05-05-raspbian-wheezy.zip
IO error encountered -- skipping file deletion
.Trash-1000/files/
.Trash-1000/files/2015-05-05-raspbian-wheezy.zip
.Trash-1000/files/berryboot-20130908.zip
.Trash-1000/files/settembre 12.img
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
rsync: [sender] write error: Broken pipe (32)
    
por Cirelli94 29.04.2016 / 16:00

1 resposta

3

O primeiro problema está na sua expansão de chave {} , que é feita pelo shell e rsync está apenas usando o resultado.

Você tornou a expansão de contraventamento uma não operacional introduzindo um espaço entre os nomes de diretório, de modo que a opção rsync the --exclude se tornou:

--exclude {/mnt/dati/Film/,

para que o rsync exclua o arquivo (ou diretório) {/mnt/dati/Film/, (presumível não existe) e o /mnt/dati/Scout/} tornou-se um arquivo de origem para copiar para rsync e não existe esse arquivo / diretório, daí o erro mensagem.

Para resolver esse problema de expansão de chave, você precisa remover o espaço entre os nomes de diretório:

{/mnt/dati/Film/,/mnt/dati/Scout/} ....

Ou melhor, basta usar a parte comum uma vez:

/mnt/dati/{Film/,Scout/} ....

Mas isso não resolve o problema com rsync porque --exclude aceita um padrão como:

--exclude='foo*bar'

ou

--exclude 'foo*bar'

também nesse caso, o diretório /mnt/dati/Scout/ ainda será considerado como um diretório de origem para copiar.

Para resolver este problema também, você pode usar vários --exclude :

rsync -av --exclude=/mnt/dati/Film/ --exclude=/mnt/dati/Scout/ ....

Ou salve os padrões em um arquivo e use:

rsync -av --exclude-from=/file/with/patterns ....
    
por heemayl 29.04.2016 / 16:16