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}...

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

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.


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.


-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)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.