Hacer una copy de security usando find y ssh en un server externo

Estoy seguro de que esto ha sido respondido en pedazos en muchos sitios, pero de alguna manera parece que no puedo get esto (como un todo) para trabajar de manera confiable.

Escenario: tengo un server en el que me gustaría hacer copys de security incrementales (estoy pensando a diario).

Los files y directorys que quiero respaldar están ubicados en los directorys: /home/ y /srv/samba/ .

La copy de security debe ser .tar.gz a /mnt/backup/ directory, y el nombre del file debe ser algo así como inc_backup_yyyymmdd.tar.gz .

Después de que .tar.gz se haya creado correctamente, el file se debe enviar a un server externo mediante ssh.

En este momento, el server crea una copy de security COMPLETA una vez a la semana, y la envío manualmente fuera del sitio a intervalos aleatorios (el tamaño de .tar.gz es de aproximadamente 60 GB, por lo que lleva un time …).

Idealmente, quisiera .tar.gz SÓLO files y carpetas regulares. Archivos que comienzan con. y ~ deben ser excluidos, así como los directorys que comienzan con.

Hay una exception :
En /home/[user]/ y /srv/samba/[someshare]/ folders tengo carpetas ".recycle", que deben includese en la copy de security, pero deben aplicarse las exclusiones de files.

P.ej

 /home/user/.hiddendirectory/ (excluded) /home/user/.hiddendirectory/myfile.txt (excluded) /home/user/myfile.txt (included) /home/user/.myfile.txt (excluded) /home/user/~myfile.txt (excluded) /home/user/mydirectory/myfile.txt (included) /home/user/.recycle/ (included) /home/user/.recycle/~tmpfile (excluded) /home/user/.recycle/.myfile (excluded) /home/user/.recycle/myfile.txt (included) 

Comienzo usando find:

Tenga en count que los siguientes commands incluyen operadores no estándar (-not, -or), por lo tanto, si los usa, asegúrese de que su sistema los admita.

 find /home -not -path '*/\.*' ! \( -name '.*' -or -name '~*' \) -mtime -1 

Esto parece encontrar los files y carpetas que necesito. ¿Pero inmediatamente que canalizo esto al alquitrán, parece ignorar todas las exclusiones?

 find /home -not -path '*/\.*' ! \( -name '.*' -or -name '~*' \) -mtime -1 -print0 | tar -zcvf /tmp/testbackup1.tar.gz --null -T - 

Parece que obtengo el resultado correcto usando lo siguiente:

 find /home -not -path '*/\.*' ! \( -name '.*' -or -name '~*' \) -mtime -1 -print0 | tar -Avf /tmp/testbackup1.tar | gzip -c /tmp/testbackup1.tar > testbackup1.tar.gz 

… pero esto parece demasiado complicado, y resulta en un tarball vacío, aunque el alquitrán tiene un tamaño significativo? Y ninguno de estos tiene en count la inclusión de .recycle.

Un bono sería un tar.gz encriptado para mayor security.

Enviar el file usando SSH es la parte fácil.

Mi idea es poner esto en un file de script, que es ejecutado por Cron.

El script podría:

  • Crear el file de respaldo (manejando el procedimiento de nombres)
  • Enviar el file de copy de security a través de SSH a un server externo
  • Borre los files viejos (por ejemplo, 2 semanas) de los directorys .recycle

La copy de security completa (en el lugar) se ejecutará una vez al mes y también se encargará de la limpieza de los files de copy de security anteriores (2 meses).

Entonces, al final tendría 2 copys de security completas y aproximadamente 60 copys de security incrementales. Una vez que se descarta una copy de security completa, las copys de security incrementales (al referirse a eso) también se eliminarán. Y todos los files de respaldo se ubicarán en el sitio y fuera del sitio.

¡Cualquier consejo (incluso enfoques totalmente nuevos) es realmente apreciado!

¡Gracias por adelantado!