Esistono molti modi per fare ciò che vuoi. Il più semplice è usare un pìpe:
tar zcvf - MyBackups | ssh user@server "cat > /path/to/backup/foo.tgz"
Qui, la compressione viene gestita da tar
quali chiamate gzip
( z
flag). Puoi anche usare compress
( Z
) e bzip
( j
). Per 7z
, fare questo:
tar cf - MyBackups | 7za a -si -mx=9 -ms=on MyBackups.tar.7z |
ssh user@server "cat > /path/to/backup/foo.7z"
Il modo migliore , tuttavia, è probabilmente 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
ha modo troppe opzioni. Vale davvero la pena leggerli, ma sono spaventosi a prima vista. Quelli a cui tieni in questo contesto sono:
-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.
Quindi, nel tuo caso, vorresti qualcosa del genere:
rsync -z MyBackups user@server:/path/to/backup/
I file verrebbero compressi durante il trasporto e arriverebbero decompressi a destinazione.
Qualche altra scelta:
scp
stesso può comprimere i dati
-C Compression enable. Passes the -C flag to ssh(1) to
enable compression.
$ scp -C source user@server:/path/to/backup
Potrebbe esserci un modo per ottenere rsync
e 7za
giocare bene, ma non ha senso farlo. Il vantaggio rsync
è che copierà solo i bit che sono stati modificati tra i file locali e remoti. Tuttavia, una piccola modifica locale può comportare un file compresso molto diverso, quindi non ha senso utilizzarlo rsync
per questo. Ciò complica le cose senza alcun beneficio. Usa direttamente ssh
come mostrato sopra. Se vuoi davvero farlo, puoi provare dando una subshell come argomento a rsync
. Sul mio sistema, non sono riuscito a farlo funzionare 7za
perché non ti consente di scrivere dati compressi su un terminale. Forse la tua implementazione è diversa. Prova qualcosa del genere ( questo non funziona per me ):
rsync $(tar cf - MyBackups | 7za a -an -txz -si -so) \
user@server:/path/to/backup
Un altro punto è che 7z
non dovrebbe essere usato per i backup su Linux . Come indicato nella 7z
pagina man:
NON UTILIZZARE il formato 7-zip a scopo di backup su Linux / Unix perché:
- 7-zip non memorizza il proprietario / gruppo del file.
-z
è almeno il doppio più lento. Per una velocità ancora maggiore rispetto a rsyncing su ssh, imposta un demone rsync e rsync usando-W
flag (copia i file interi (senza algoritmo delta-xfer).