Jak mogę utworzyć skompresowaną smołę w słonecznych promieniach słońca?

11

Jestem zalogowany do systemu operacyjnego Sun Solaris. Chcę utworzyć i wyodrębnić skompresowany plik tar. Próbowałem tego normalnego polecenia UNIX:

tar -cvzf file.tar.gz directory1

Nie można wykonać w systemie Sun OS z następującym błędem

bash-3.2$ tar -cvzf file.tar.tz directory1
tar: z: unknown function modifier
Usage: tar {c|r|t|u|x}[BDeEFhilmnopPqTvw@[0-7]][bfk][X...] [blocksize] [tarfile] [size] [exclude-file...] {file | -I include-file | -C directory file}...
Girish Sunkara
źródło
2
Jak myślisz, dlaczego jest to normalne polecenie UNIX?
schaiba
Myślę, że musisz poświęcić trochę czasu na czytanie różnic między narzędziami Unixes Linux i GNU.
coteyr 28.04.17
4
Kiedy dodali tę zflagę do tar GNU, straciliśmy nasz najlepszy przykład uczenia ludzi logicznego myślenia i budowania potoku ...

Odpowiedzi:

28

Aby uniknąć tworzenia tymczasowego pliku pośredniego, możesz użyć tego polecenia

tar cvf - directory1|gzip -c >file.tar.gz
Romeo Ninov
źródło
2
Ma to potencjalną zaletę polegającą na tym, że niektóre przetwarzanie może odbywać się równolegle.
psmears
Czy jest to f -potrzebne, czy też Solaris tardomyślnie wyświetla wyjście standardowe?
Mark
2
@Mark: Według strony man „Jeżeli fzostanie pominięty, tarbędzie wykorzystywać urządzenie wskazany przez TAPEzmienną środowiskową, czy zestaw, w przeciwnym razie użyje wartości domyślne zdefiniowane w /etc/default/tar.” Nie wygląda na to, że można bezpiecznie założyć, że f -nie jest to konieczne.
Ilmari Karonen
@Romeo: Dzięki za odpowiedź, uznałem ją za przydatną. Czy możesz wyjaśnić, dlaczego między cvf a nazwą katalogu potrzebne jest „-”? Dodatkowo wypróbowałem twoje polecenie na kilku systemach operacyjnych - Solaris 10, 11.4, Linux (RHEL, CentOS, Oracle itp.) I działa konsekwentnie. Przejrzałem także odpowiednie strony podręcznika tar - dlaczego powyższe działa w Linuksie bez „-” przed cvf? Spodziewałbym się, że Linux będzie wymagał czegoś takiego jak „tar -cvf ....” Jeszcze raz dziękuję za odpowiedź.
rc1
@ rc1, myślnik w tar oznacza, że ​​ustawiłeś plik wyjściowy na STDOUT. Istnieją dwa style parametrów, BSD i SYSV. A tar Linux działa z nimi obiema (z i bez myślnika przed cvf)
Romeo Ninov
10

Wygląda na to, że Solaris tarnie umie kompresować. Więc po prostu zrób to ręcznie:

tar -cvf file.tar directory1 && gzip file.tar

To wszystko, co -zrobi przełącznik GNU tar. Powyższe polecenie wygeneruje file.tar.gz.

terdon
źródło
To zadziała (o ile masz wystarczającą ilość wolnego miejsca na dysku do przechowywania pośredniego nieskompresowanego file.tararchiwum), ale jest to niepotrzebnie wolne i marnuje miejsce na dysku. Nie mogę wymyślić żadnej sytuacji, w której byłoby to lepsze niż odpowiedź Romeo Ninowa .
Ilmari Karonen
1
@IlmariKaronen też nie mogę. Właśnie o tym pomyślałem.
terdon
2

Sprawdź, czy masz SUNWgtarzainstalowany. Jest to wersja GNU tari zapewnia, /usr/sfw/bin/gtarktóra pozwoli na użycie opcji GNU do tarowania.

MikeA
źródło
-1

Spróbuj wykonać poniższe polecenie

tar -cvf file.tar directory1 && gzip file.tar

(aby spakować plik na solaris)

gunzip file.tar.gz

(odsunąć zamek błyskawiczny)

Nilesh Varshney
źródło
1
To nie dodaje całej gamy poza poprzednią odpowiedzią
Jeff Schaller
Zrzuca również cały plik tar (w tym wszystkie pliki binarne w nagłówkach) na terminal, zamiast cofania archiwizacji plików. Prawdopodobnie będziesz musiał później zresetować terminal.
Paul_Pedant