Używam GNU tar. Może automatycznie wykryć typ kompresji podczas kompresji / dekompresji plików. Ale muszę zdekompresować archiwum ze standardowego wejścia i typ kompresji jest nieznany. Zauważyłem, że smoła może dać mi prawidłowe sugestie, takie jak:
tar: Archive is compressed. Use -z option
Chcę jednak, aby tar automatycznie używał tej opcji kompresji bez pytania mnie o podanie tego argumentu. Jak mogę to zrobić? Dlaczego nie tar po prostu rozpakować, ponieważ już zna typ kompresji?
Dziękuję Ci!
linux
compression
tar
James
źródło
źródło
tar
nie wie, jaki typ danych ma na sobie,stdin
dopóki nie przeczyta, a do tego czasu jest już za późno na wywołanie programu dekompresującego. Obsługuje gzip, bzip2 i inne. Obejście tego problemu nie jest łatwe (musiałoby buforować dane), więc po prostu każe ci spróbować ponownie.fork()
/exec()
metodę rury dane przez rozpakować użyteczności. Narzędzie będzie czytać zstdin
potoku, a teraz będzie brakowało pierwszego 4K. Po odczytaniu danych nie ma możliwości ponownego umieszczenia danych w potoku.cat buffer - | gunzip
. (Alternatywnie, można użyć nieblokujących wejść / wyjść, aby uniknąć konieczności dodatkowego procesu.)Odpowiedzi:
To nie jest odpowiedź, którą chcesz usłyszeć, ale nie jest obsługiwana przez GNU tar zgodnie z jego instrukcją:
- 8.1.1 Tworzenie i czytanie skompresowanych archiwów
źródło
Wreszcie zdałem sobie sprawę, że nie mogę pozwolić tarowi wykrywać i dekompresować archiwum ze standardowego wejścia, ponieważ używam tar GNU. Tar BSD może to zrobić automatycznie bez problemu. Więc zdecydowałem się teraz używać bsdtar zamiast tar w moim skrypcie.
źródło