Jak tar / rozpakować wyjście w locie

27

Jaki jest idiomatyczny sposób na wykonanie następujących czynności

  • tar na standardowe wyjście
  • przeczytaj to wyjście tar ze standardowego wyjścia i wypakuj do innego folderu.

Moje rozwiązanie to tar --to-stdout .. | tar -C somefolder -xvf -

Ale może być bardziej idiomatyczny sposób na zrobienie tego.

shabunc
źródło

Odpowiedzi:

34

Ta sama -f -opcja działa również w przypadku tarowania.

tar -cf - something | tar -C somefolder -xvf -

GNU tar domyślnie używa stdio:

tar -c something | tar -C somefolder -xv

rsync jest również popularny.

rsync -av something/ somefolder/
grawitacja
źródło
9

Po prostu dodam tutaj inny przypadek użycia. Miałem dużą strukturę katalogów w systemie prawie brak miejsca na dysku i chciałem skończyć z plikiem tar.gz struktury katalogów na innym komputerze z dużą ilością miejsca.

tar -czf - big-dir | ssh user@host 'cat > /path/to/big-dir.tar.gz'

Oszczędza to narzutów sieciowych i oznacza, że ​​nie musisz tarować po drugiej stronie, na wypadek gdybyś chciał zamiast tego użyć rsync do transferu.

szybka zmiana
źródło
Netcat jest do tego idealny. (Cat od jednego hosta do drugiego hosta).
Hennes,
3
@Hennes: Z powodu braku uwierzytelnienia, sprawdzania integralności, szyfrowania danych, a także konieczności ręcznego uruchamiania go po obu stronach dla każdego pojedynczego transferu (tj. 2 × pracy), brzmi to nieco mniej niż idealnie
grawitacja
Przez większość czasu gzipuję go przed zrzuceniem go przez sieć. Wszelkie awarie integralności mogą pojawić się jako błędy dekompresyjne (chociaż nigdy ich nie dostałem, gdy ich użyłem). Jeśli chodzi o uruchomienie dwóch programów: Tak, prawda.
Hennes,
3
Może to być więcej pracy, ale w przypadku wysyłania dużego skompresowanego archiwum za pośrednictwem łącza podczas operacji wrażliwej na czas między maszynami w zabezpieczonej sieci lokalnej lub przez sieć VPN, przesyłanie przez nc będzie znacznie szybsze niż SSH (w sieci 1 Gb, często 2 razy). Wyślij sumę md5 archiwum w celu sprawdzenia integralności.
Spooler