Invece di usare tar per scrivere sul tuo disco locale, puoi scrivere direttamente sul server remoto sulla rete usando ssh.
server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"
Qualsiasi stringa che segue il comando "ssh" verrà eseguita sul server remoto invece dell'accesso interattivo. È possibile reindirizzare input / output da e verso quei comandi remoti tramite SSH come se fossero locali. Mettere il comando tra virgolette evita qualsiasi confusione, specialmente quando si utilizza il reindirizzamento.
In alternativa, è possibile estrarre direttamente il file tar sull'altro server:
server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"
Nota l' -C
opzione usata di rado . Significa "passare a questa directory prima di fare qualsiasi cosa".
O forse vuoi "estrarre" dal server di destinazione:
server2$ tar -zx -C /destination < <(ssh server2 "tar -zc -C /srcdir ./path")
Nota che il <(cmd)
costrutto è nuovo per bash e non funziona su sistemi più vecchi. Esegue un programma e invia l'output a una pipe e sostituisce quella pipe nel comando come se fosse un file.
Avrei potuto facilmente scrivere quanto sopra come segue:
server2$ tar -zx -C /destination -f <(ssh server2 "tar -zc -C /srcdir ./path")
O come segue:
server2$ ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination
Oppure, puoi risparmiare un po 'di dolore e usare semplicemente rsync:
server1$ rsync -az ./path server2:/destination/
Infine, ricorda che la compressione dei dati prima del trasferimento ridurrà la larghezza di banda, ma su una connessione molto veloce, l'operazione potrebbe richiedere più tempo . Questo perché il tuo computer potrebbe non essere in grado di comprimere abbastanza velocemente da tenere il passo: se comprimere 100 MB impiega più tempo di quello necessario per inviare 100 MB, allora è più veloce inviarlo non compresso.
In alternativa, potresti prendere in considerazione l'idea di eseguire il piping di gzip (anziché utilizzare l'opzione -z) in modo da poter specificare un livello di compressione. È stata la mia esperienza che su connessioni di rete veloci con dati comprimibili, l'uso di gzip a livello 2 o 3 (il valore predefinito è 6) offre la migliore velocità complessiva nella maggior parte dei casi. Così:
server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"