Odpowiedzi:
Użyj -J
opcji kompresji dla xz
. I pamiętaj o man tar
:)
tar cfJ <archive.tar.xz> <files>
Edycja 2015-08-10:
Jeśli przekazujesz argumenty tar
z myślnikami (np .: tar -cf
w przeciwieństwie do tar cf
), to -f
opcja musi być ostatnia , ponieważ określa nazwę pliku (dzięki @ABB za wskazanie tego!). W takim przypadku polecenie wygląda następująco:
tar -cJf <archive.tar.xz> <files>
f
ostatnią, nawet bez myślnika.
tar
w systemie macOS wydaje się obsługiwać, -J
ale funkcja nie jest podana na stronie podręcznika. Musiałem to sprawdzić tutaj. Chociaż wspominają o XZ w sekcji o --options
...
Przełącznik -J
działa tylko w nowszych systemach. Uniwersalne polecenie to:
Aby utworzyć archiwum .tar.xz
tar cf - directory/ | xz -z - > directory.tar.xz
Wyjaśnienie
tar cf - directory
czyta katalog / i zaczyna umieszczać go w formacie TAR. Wynik tej operacji jest generowany na standardowym wyjściu.
|
przesyła standardowe wyjście na wejście innego programu ...
... co tak się dzieje xz -z -
. XZ jest skonfigurowany do kompresji ( -z
) archiwum ze standardowego wejścia ( -
).
Przekierowujesz dane wyjściowe z xz
do tar.xz
pliku.
-f
nie oznacza „z pliku” po przekazaniu do xz
. Zamiast tego jest skrótem od --force
(szczegóły w xz (1) ) i najlepiej go nie używać, chyba że jest to potrzebne.
tar cf - directory/ | xz -z -T0 - > directory.tar.xz
-1 -T0
lub -0 -T0
jako opcjami, które zwykle dają mniejszy plik niż gzip w porównywalnym lub szybszym czasie, podczas gdy domyślny -6
jest znacznie wolniejszy niż gzip.
Jeśli podoba ci się tryb rur, jest to najbardziej czyste rozwiązanie:
tar c some-dir | xz > some-dir.tar.xz
Nie jest konieczne umieszczanie tej f
opcji, aby zajmować się plikami, a następnie użycie -
do określenia, że plik jest standardowym wejściem. Nie trzeba też określać -z
opcji dla xz
, ponieważ jest ona domyślna.
Działa z gzip
i bzip2
też:
tar c some-dir | gzip > some-dir.tar.gz
lub
tar c some-dir | bzip2 > some-dir.tar.bz2
Dekompresja jest również dość prosta:
xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x
Jeśli masz tylko tar
archiwum, możesz użyć cat
:
cat archive.tar | tar x
Jeśli chcesz wyświetlić tylko pliki, użyj tar t
.
Jeśli chcesz użyć opcji kompresji dla xz
lub jeśli używasz tar
w systemie MacOS, prawdopodobnie chcesz uniknąć tar -cJf
składni.
Zgodnie z man xz
tym sposobem na to jest:
tar cf - baz | xz -4e > baz.tar.xz
Bo podobał mi się format Wojciecha Adama Koszka , ale nie informacja:
c
tworzy nowe archiwum dla określonych plików. f
czyta z katalogu (najlepiej umieścić to na sekundę, ponieważ -cf
! = -fc
)-
wyjścia na standardowe wyjście|
potokuje wyjście do następnego poleceniaxz -4e
połączenia xz
z -4e
opcją kompresji. (równe -4
--extreme
)> baz.tar.xz
kieruje tarowany i skompresowany plik do baz.tar.xz
gdzie -4e
jest, użyj własnych opcji kompresji. Często używam -k
do --keep
oryginalnego pliku i -9
do naprawdę dużej kompresji. -z
ręcznie ustawić xz
na zip, chociaż domyślnie jest to kompresowanie, jeśli nie jest to zalecane.
Aby powtórzyć Rafael van Horn , aby zdekompresować i rozpakować (patrz uwaga poniżej):
xz -dc baz.tar.xz | tar x
Uwaga: w przeciwieństwie do odpowiedzi Rafaela użyj xz -dc
zamiast catxz
. Dokumenty zalecają to w przypadku, gdy używasz tego do pisania skryptów. Najlepiej mieć nawyk używania -d
lub --decompress
zamiast tego unxz
. Jeśli jednak musisz, użycie tych poleceń z wiersza poleceń jest w porządku.
tar -cJf
składni w systemie MacOS? Po prostu ciekawy, ponieważ właśnie to robiłem i wydawało się, że działa.
Spróbuj tego: tar -cf file.tar file-to-compress ; xz -z file.tar
Uwaga:
|
ponieważ powoduje to jednoczesne uruchamianie poleceń. Używanie ;
lub &
wykonywanie poleceń jedno po drugim.J
opcji, ale to działa. Myślę, że potrzebujesz RHEL6.
tar -c file-to-compress | xz -z > file.tar.xz
.
&
nie spowoduje uruchomienia poleceń jedno po drugim. Zamiast tego uruchomi pierwszy jako proces w tle.
v
do polecenia przełączników (tar -cJvf
), aby były pełne, pokazuje pliki dodawane do archiwum.