rsync - copia uma lista de arquivos em um diretório remoto

3

Eu tenho um comando rsync que procura arquivos recém-criados e depois sincroniza com o PC remoto. Ambos os PCs tiveram a mesma estrutura de arquivos até recentemente.

find /mnt/movies -type f -ctime -1 -print0 | rsync -0Prvuz --log-file=/home/daisy/rsync/movies.log -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --files-from=- --from0 / [email protected]:/

Nesse caso, filmes recém-criados de /mnt/movies/ são enviados para o destino no mesmo local ( /mnt/movies/ ).

Agora, preciso enviá-los para /mnt/drive/movies/ , o que é uma alteração, mas, para minha vida, não posso descobrir como fazer isso.

Eu entendo que / após --files-from=- --from0 faz com que o rsync coloque a saída de find no diretório / do destino, alterando o / para /mnt/drive/ fazendo com que o rsync crie o diretório /mnt/movies/... dentro a pasta /mnt/drive . O que eu gostaria de ver é /mnt/drive/movies/movie1/1.mkv

Espero que alguém possa me ajudar com isso: /

    
por Daisyqq 10.10.2016 / 10:41

1 resposta

2

Eu testei apenas parcialmente a minha solução, pois não tenho um sistema remoto, mas entendo que seu problema está sendo sincronizado de / a / (a árvore inteira). rsync aceitará uma origem e um destino, mas find está fornecendo caminhos completos, portanto, só funcionará se você sincronizar a árvore inteira. Meu primeiro pensamento foi usar sed para retirar a parte principal dos caminhos e, em seguida, especificar a origem para rsync para que possa encontrar esses arquivos e especificar o destino também

find ... | sed -z 's/^\/mnt\/movies\///' | rsync ...

(usando -z para informar sed para usar separadores NULL de -print0 e --from0 )

Mas, steeldriver apontou em um comentário que podemos alcançar a mesma coisa sem sed usando printf '%Pprint0' em vez de apenas find no comando movie1/1.mkv , e isso não exatamente o mesmo que a minha idéia, mas muito mais elegantemente (descartando a parte do caminho especificado no comando).

Fazendo isso, cada caminho de arquivo será apenas --from0 / [email protected]:/ . Assim, no final, em vez de rsync , diga %code% onde procurar esse caminho e onde encontrar o destino no sistema remoto:

--from0 /mnt/movies [email protected]:/mnt/drive/movies

Isso funciona bem para mim com cópia local.

comando completo sugerido:

find /mnt/movies -type f -ctime -1 -printf '%P
find ... | sed -z 's/^\/mnt\/movies\///' | rsync ...
' | rsync -Prvuz --log-file=/home/daisy/rsync/movies.log -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --files-from=- --from0 /mnt/movies [email protected]:/mnt/drive/movies
    
por Zanna 10.10.2016 / 13:06