En lugar de usar tar para escribir en su disco local, puede escribir directamente en el servidor remoto a través de la red usando ssh.
server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"
Cualquier cadena que siga su comando "ssh" se ejecutará en el servidor remoto en lugar del inicio de sesión interactivo. Puede canalizar la entrada / salida hacia y desde esos comandos remotos a través de SSH como si fueran locales. Poner el comando entre comillas evita cualquier confusión, especialmente cuando se usa la redirección.
O bien, puede extraer el archivo tar en el otro servidor directamente:
server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"
Tenga en cuenta la -C
opción rara vez utilizada . Significa "cambiar a este directorio primero antes de hacer algo".
O, tal vez desee "extraer" del servidor de destino:
server2$ tar -zx -C /destination < <(ssh server2 "tar -zc -C /srcdir ./path")
Tenga en cuenta que la <(cmd)
construcción es nueva para bash y no funciona en sistemas más antiguos. Ejecuta un programa y envía la salida a una tubería, y la sustituye en el comando como si fuera un archivo.
Podría haber escrito fácilmente lo anterior de la siguiente manera:
server2$ tar -zx -C /destination -f <(ssh server2 "tar -zc -C /srcdir ./path")
O como sigue:
server2$ ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination
O bien, puede ahorrarse algo de pena y simplemente usar rsync:
server1$ rsync -az ./path server2:/destination/
Finalmente, recuerde que comprimir los datos antes de la transferencia reducirá su ancho de banda, pero en una conexión muy rápida, puede hacer que la operación tome más tiempo . Esto se debe a que es posible que su computadora no pueda comprimir lo suficientemente rápido como para mantener el ritmo: si comprimir 100 MB demora más de lo necesario para enviar 100 MB, entonces es más rápido enviarlo sin comprimir.
Alternativamente, es posible que desee considerar la canalización para gzip usted mismo (en lugar de usar la opción -z) para que pueda especificar un nivel de compresión. Según mi experiencia, en conexiones de red rápidas con datos comprimibles, el uso de gzip en el nivel 2 o 3 (el valor predeterminado es 6) proporciona el mejor rendimiento general en la mayoría de los casos. Al igual que:
server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"