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 '%P
em vez de apenas print0
'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 '%Pfind ... | 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