Quero rsync arquivos com mais de 2 dias, sincroniza todos os arquivos

1

Eu corro um servidor de jogos com um plug-in que coloca backups de hora em hora em / backups. Após 1 dia, o plug-in salva 2 backups / dia e exclui o restante. Desejo sincronizar este diretório de backup com um servidor remoto, mas apenas para arquivos com mais de 2 dias, para que não sincronize arquivos que eventualmente serão excluídos até o final do dia.

Para fazer isso, eu executo o seguinte:

find /path/backups/ -type f -mtime 2 -exec rsync -vPhd -e "ssh -p 512" /path/backups/ --delete --ignore-existing me@host:/remote/path/server-backups/ \;

Isso faz com que todos os arquivos em / backups / sejam sincronizados com / server-backups / em vez de arquivos com mais de 2 dias. Como resolveria esse problema? Obrigado pela ajuda!

Ayys
fonte
Eu acho que você precisa alterar seu comando exec.
Natim
Tente substituir o rsync pelo scp e use {}. Aqui você não passa o resultado do seu comando find para o comando rsync.
Natim

Respostas:

3

Natim está correto, pois {} precisa ser usado para passar os nomes de arquivos para o rsync. Não há necessidade de mudar para scp. Basta usar o {} com rsync como em:

find /path/backups/ -type f -mtime +2 -exec rsync -vPhd -e "ssh -p 512" {} --delete --ignore-existing me@host:/remote/path/server-backups/ \;

Nota: eu também mudei

-mtime 2

para

-mtime +2

ao declarar arquivos com mais de 2 dias. Pode ser necessário ajustá-lo às suas necessidades exatas.

Kees Beets
fonte
Obrigado pela resposta! Agora, ele sincroniza arquivos com mais de 2 dias, conforme pretendido. Como uma observação lateral, --delete é usado corretamente? Ele não exclui arquivos no destino quando o diretório local é atualizado.
Ayys
sim, é porque o {} passa os arquivos e não o diretório como tal. então, por definição, não há nada para excluir e você pode realmente pular o --delete. se você realmente quiser, poderá excluir os arquivos no destino antes do rsync. Eu não recomendaria isso, pois quando algo der errado na fonte, você também perderá os arquivos no destino. Eu recomendaria manter a declaração acima (sem o argumento --delete que não faz nada) e implementar um script de limpeza separado no destino. Dependendo da sua resposta, eu ajusto minha resposta :).
Kees Beets