Hay muchas formas de hacer lo que quieres. Lo más simple es usar una pipa:
tar zcvf - MyBackups | ssh user@server "cat > /path/to/backup/foo.tgz"
Aquí, la compresión está siendo manejada por tar
qué llamadas gzip
( z
flag). También puede usar compress
( Z
) y bzip
( j
). Para 7z
hacer esto:
tar cf - MyBackups | 7za a -si -mx=9 -ms=on MyBackups.tar.7z |
ssh user@server "cat > /path/to/backup/foo.7z"
La mejor manera, sin embargo, es probablemente rsync
.
Rsync is a fast and extraordinarily versatile file copying tool. It can copy
locally, to/from another host over any remote shell, or to/from a remote rsync dae‐
mon. It offers a large number of options that control every aspect of its behavior
and permit very flexible specification of the set of files to be copied. It is
famous for its delta-transfer algorithm, which reduces the amount of data sent over
the network by sending only the differences between the source files and the exist‐
ing files in the destination. Rsync is widely used for backups and mirroring and
as an improved copy command for everyday use.
rsync
tiene forma demasiadas opciones. Realmente vale la pena leerlos, pero a primera vista dan miedo. Sin embargo, los que le interesan en este contexto son:
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
-z, --compress
With this option, rsync compresses the file data as it is sent to the desti‐
nation machine, which reduces the amount of data being transmitted --
something that is useful over a slow connection.
Note that this option typically achieves better compression ratios than can
be achieved by using a compressing remote shell or a compressing transport
because it takes advantage of the implicit information in the matching data
blocks that are not explicitly sent over the connection.
Entonces, en su caso, querría algo como esto:
rsync -z MyBackups user@server:/path/to/backup/
Los archivos se comprimirían durante el tránsito y llegarían descomprimidos al destino.
Algunas opciones más:
scp
en sí mismo puede comprimir los datos
-C Compression enable. Passes the -C flag to ssh(1) to
enable compression.
$ scp -C source user@server:/path/to/backup
Puede haber una manera de obtener rsync
y 7za
jugar bien, pero no tiene sentido hacerlo. La ventaja rsync
es que solo copiará los bits que han cambiado entre los archivos locales y remotos. Sin embargo, un pequeño cambio local puede dar como resultado un archivo comprimido muy diferente, por lo que no tiene sentido usarlo rsync
. Simplemente complica las cosas sin beneficio. Simplemente use directo ssh
como se muestra arriba. Si realmente quieres hacer esto, puedes intentar dando una subshell como argumento para rsync
. En mi sistema, no pude hacer que esto funcione 7za
porque no le permite escribir datos comprimidos en un terminal. Quizás su implementación es diferente. Pruebe algo como ( esto no funciona para mí ):
rsync $(tar cf - MyBackups | 7za a -an -txz -si -so) \
user@server:/path/to/backup
Otro punto es que 7z
no debe usarse para copias de seguridad en Linux . Como se indica en la 7z
página del manual:
NO UTILICE el formato 7-zip para fines de copia de seguridad en Linux / Unix porque:
- 7-zip no almacena el propietario / grupo del archivo.
-z
es al menos el doble de lento. Para una mayor velocidad de la que rsyncing sobre ssh, configurar un demonio rsync rsync y el uso de-W
la bandera (archivos de copias conjunto (w / o algoritmo delta-xfer).