archivos rsync más nuevos que 1 semana

24

Quiero ejecutar rsync en el servidor A para copiar todos los archivos del servidor B cuando sean más recientes que 7 días.

find . -mtime -7

No quiero eliminar los archivos en el Servidor B.

mm1
fuente
b) ¿con qué frecuencia ejecuta rsync?

Respuestas:

30

Esto debería ponerte en marcha de una manera sólida

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

Esto copia nodos de dispositivos, permisos, marcas de tiempo. Estoy bastante seguro de que la opción -H no será precisa con --files-from

sehe
fuente
23
Para configurarlo como un 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
Quiero agregar una corrección para el comentario de cybertoast. Quizás el contexto es diferente al mío, pero estaba tratando de extraer archivos simples de un servidor remoto dado el criterio de tiempo. Entonces, el servidor A es mi destino y el servidor B es mi fuente, entonces: rsync -avn --files-from = <(ssh user @ A 'find / path / on / A / -mtime -7 -type f -exec basename {} \; ') usuario @ B: / / ruta / en / servidor / A Observe que solo hay una fuente / principal. --Files-from se encarga de la ruta relativa para usted. Si tiene dudas, use man rsync y vea la sección --files-from.
einarc
@cybertoast ¿Qué basenamesignifica en su comando? ¿Puedes explicar por favor?
Kemat Rochi
@KematRochi - "basename, dirname - devuelve el nombre del archivo o la parte del directorio del nombre de la ruta". Espero que ayude.
cybertoast
6

Escribí este script basado en el comentario de cybertoast para sincronizar desde un servidor remoto a local.

Puede llamar al script con ./script.sh 3o ./script.sh 3 drypara una ejecución en 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
fuente