Existem várias maneiras de fazer o que você deseja. O mais simples é usar um pìpe:
tar zcvf - MyBackups | ssh user@server "cat > /path/to/backup/foo.tgz"
Aqui, a compactação está sendo manipulada por tar
, que chama gzip
( z
flag). Você também pode usar compress
( Z
) e bzip
( j
). Para 7z
, faça isso:
tar cf - MyBackups | 7za a -si -mx=9 -ms=on MyBackups.tar.7z |
ssh user@server "cat > /path/to/backup/foo.7z"
A melhor forma, no entanto, provavelmente é 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
tem caminho muitas opções. Realmente vale a pena ler através deles, mas eles são assustadores à primeira vista. Aqueles com quem você se importa nesse contexto são:
-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.
Então, no seu caso, você gostaria de algo assim:
rsync -z MyBackups user@server:/path/to/backup/
Os arquivos serão compactados enquanto estiverem em trânsito e serão descomprimidos no destino.
Mais algumas escolhas:
-
scp
pode compactar os dados-C Compression enable. Passes the -C flag to ssh(1) to enable compression. $ scp -C source user@server:/path/to/backup
-
Pode haver uma maneira de fazer com que
rsync
e7za
sejam bons, mas não faz sentido fazê-lo. O benefício dersync
é que ele copiará apenas os bits que foram alterados entre os arquivos locais e remotos. No entanto, uma pequena alteração local pode resultar em um arquivo compactado muito diferente, portanto, não faz sentido usarrsync
para isso. Isso só complica as coisas sem nenhum benefício. Apenas usessh
direto como mostrado acima. Se você realmente quiser fazer isso, você pode tentar dar um subshell como um argumento pararsync
. No meu sistema, eu não consegui fazer isso funcionar com7za
porque ele não permite que você grave dados compactados em um terminal. Talvez sua implementação seja diferente. Tente algo como ( isso não funciona para mim ):rsync $(tar cf - MyBackups | 7za a -an -txz -si -so) \ user@server:/path/to/backup
-
Outro ponto é que
7z
não deve ser usado para backups no Linux . Conforme indicado na página7z
man:DO NOT USE the 7-zip format for backup purpose on Linux/Unix because :
- 7-zip does not store the owner/group of the file.