Arquivos rsync com mais de uma semana

24

Desejo executar o rsync no servidor A para copiar todos os arquivos do Servidor B quando eles tiverem mais de 7 dias.

find . -mtime -7

Não quero excluir os arquivos no servidor B.

mm1
fonte
b) com que frequência você executa o rsync?

Respostas:

30

Isso deve levá-lo a caminho de uma maneira sólida

rsync -RDa0P \
    --files-from=<(find sourcedir/./ -mtime -7 -print0) \
    . user@B:targetdir/

Isso copia nós do dispositivo, permissões, registros de data e hora. Tenho certeza de que a opção -H não será precisa com --files-from

ver
fonte
23
Para definir isso como um filtro remoto:rsync -avn --files-from=<(ssh user@A 'find /path/on/A/ -mtime -7 -type f -exec basename {} \;') user@A:/path/on/A/ user@B:targetdir
cybertoast
Quero adicionar uma correção ao comentário de cybertoast. Talvez o contexto dele seja diferente do meu, mas eu estava tentando extrair arquivos simples de um servidor remoto, considerando os critérios de tempo. Portanto, o servidor A é meu destino e o servidor B é minha fonte, então: rsync -avn --files-from = <(usuário ssh @ A 'find / path / on / A / -mtime -7 -type f -exec basename {} \; ') user @ B: / / path / in / server / A Observe que há apenas uma fonte principal / para. O --files-from cuida do caminho relativo para você. Se você tiver dúvidas, use man rsync e consulte a seção --files-from.
einarc
@cybertoast O que basenamesignifica em seu comando? Você pode explicar por favor?
Kemat Rochi
@KematRochi - "basename, dirname - retorna o nome do arquivo ou parte do diretório do nome do caminho". Espero que ajude.
cybertoast
6

Eu escrevi esse script com base no comentário do cybertoast para sincronizar de um servidor remoto para local.

Você pode chamar o script com ./script.sh 3ou ./script.sh 3 drypara uma execução a seco.

#!/bin/bash
TIME=$1
DRYRUN=$2

if [[ -z $TIME ]]; then
  echo "Error: no time argument."
  echo "Please enter the number of days to sync."
  exit 1
fi

if [[ $DRYRUN = "dry" ]]; then
  DRYRUNCMD="--dry-run"
  echo "Dry run initiated..."
fi

rsync -avz $DRYRUNCMD --files-from=<(ssh \
    user@remote "find path/to/data/ \
    -mtime -$TIME ! -name *.mkv -type f \
    -exec ls $(basename {}) \;") \
  user@remote:. .
Rohmer
fonte