Jak rozpakować katalog, przesłać przez scp i rozpakować w jednym poleceniu?

11

Często przesyłam duże katalogi scpi byłoby miło, gdybym mógł w jakiś sposób skompresować katalog, wysłać go i zdekompresować w jednym.

Czy coś takiego jest możliwe?

macek
źródło

Odpowiedzi:

29

Co powiesz na użycie rsynczamiast tego z -zwłączoną opcją kompresji?

rsync -az --progress source_dir/* remote_host:/destination_dir

Ma to również tę dodatkową zaletę, że jeśli plik już istnieje i nie zmienił się w miejscu docelowym, nie zostanie przesłany.

AaronM
źródło
7

Dzięki odpowiedzi @ johnshen64 udało mi się wymyślić coś całkiem fajnego

tar -zc path/to/source | ssh user@remote tar -zxC path/to/destination

Niestety nie pokazuje to postępu podczas przesyłania. Za pomocą tej metody zauważyłem niesamowitą poprawę prędkości.

Jeśli ktoś wie, jak pokazać postęp w takim transferze, bardzo doceniam pomoc :)

macek
źródło
1
Wstaw pvpomiędzy tar i ssh .
user1686
Jest to świetne, jeśli nie masz dostępnego rsync
Simon Hartcher,
2

cóż, zamiast tego użyłbym tar

tar cf - katalog | serwer ssh „tar xf -”

możesz dodać v, aby zweryfikować.

zip powinien być taki sam, ale moim zdaniem tar jest bardziej odporny na Linuksa.

johnshen64
źródło
+1 dzięki za pomoc; to doprowadziło mnie do połowy. Udało mi się znaleźć rozwiązanie, które nie korzysta z tajemniczej -postaci, używa także kompresji gzip i pozwala na wybranie katalogu docelowego.
Macek
@macek: Zauważ, że f -może to być wymagane w innych systemach operacyjnych, ponieważ większość wersji tar spróbuje inaczej odczytać z napędu taśmowego. Domyślnie odczyt ze standardowego wejścia jest specyficzny dla GNU.
user1686,