Zamiast używać tar do zapisu na dysku lokalnym, możesz pisać bezpośrednio na zdalnym serwerze przez sieć za pomocą ssh.
server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"
Każdy ciąg następujący po komendzie „ssh” będzie uruchamiany na zdalnym serwerze zamiast logowania interaktywnego. Możesz przesyłać dane wejściowe / wyjściowe do i ze zdalnych poleceń przez SSH, tak jakby były lokalne. Umieszczanie polecenia w cudzysłowach pozwala uniknąć nieporozumień, szczególnie podczas korzystania z przekierowania.
Lub możesz wyodrębnić plik tar na innym serwerze bezpośrednio:
server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"
Zwróć uwagę na rzadko używaną -C
opcję. Oznacza to „najpierw zmień ten katalog, zanim cokolwiek zrobisz”.
A może chcesz „wyciągnąć” z serwera docelowego:
server2$ tar -zx -C /destination < <(ssh server2 "tar -zc -C /srcdir ./path")
Zauważ, że <(cmd)
konstrukcja jest nowa do bash i nie działa na starszych systemach. Uruchamia program i wysyła dane wyjściowe do potoku i zastępuje potok w poleceniu, tak jakby był plikiem.
Mogłem łatwo napisać powyższe w następujący sposób:
server2$ tar -zx -C /destination -f <(ssh server2 "tar -zc -C /srcdir ./path")
Lub w następujący sposób:
server2$ ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination
Możesz też zaoszczędzić trochę smutku i po prostu użyć rsync:
server1$ rsync -az ./path server2:/destination/
Na koniec pamiętaj, że kompresja danych przed przesłaniem zmniejszy przepustowość, ale w przypadku bardzo szybkiego połączenia może to spowodować, że operacja zajmie więcej czasu . Wynika to z faktu, że komputer może nie być w stanie skompresować wystarczająco szybko, aby nadążyć: jeśli kompresja 100 MB zajmuje więcej czasu niż wysłanie 100 MB, wówczas szybsze jest przesłanie jej bez kompresji.
Alternatywnie, możesz rozważyć użycie pipingu do samodzielnego gzipowania (zamiast korzystania z opcji -z), abyś mógł określić poziom kompresji. Z mojego doświadczenia wynika, że w przypadku szybkich połączeń sieciowych z kompresyjnymi danymi używanie gzip na poziomie 2 lub 3 (domyślnie jest to 6) daje najlepszą ogólną przepustowość w większości przypadków. Tak jak:
server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"