하나의 명령으로 tar.xz 만들기


159

.tar.xz하나의 명령 으로 압축 된 아카이브 를 만들려고합니다 . 이에 대한 구체적인 구문은 무엇입니까?

시도 tar cf - file | xz file.tar.xz했지만 작동하지 않습니다.

답변:


241

-J압축 옵션을 사용하십시오 xz. 그리고 기억하십시오 man tar:)

tar cfJ <archive.tar.xz> <files>

2015-08-10 편집 :

당신이에 인수를 전달하는 경우 tar 대시 (예 : tar -cf반대 tar cf), 다음 -f옵션은 마지막으로 와야 은 파일 이름을 지정하기 때문에, (덕분에 @ABB 그 아웃 지적를 들어!). 이 경우 명령은 다음과 같습니다.

tar -cJf <archive.tar.xz> <files>

5
추가 v명령 스위치 ( tar -cJvf) 파일이 아카이브에 추가되는 방송 상세한다.
스튜어트 Cardall

7
대시와 함께 순서가 중요하므로 순서가 항상 중요하다고 가정 f하고 대시가 없어도 마지막을 배치하는 것이 가장 좋습니다 .
mwfearnley

1
-e (--extended)와 같은 xz 매개 변수를 전달할 수 있습니까? 분명히 기본적으로 확장을 사용하지 않습니다.
chmike

3
tarmacOS에서는 지원하는 것 -J같지만이 기능은 매뉴얼 페이지에 나와 있지 않습니다. 여기를 봐야했다. 그들은 섹션에 XZ를 언급하지만 --options...
cbarrick

1
@chmike XZ_OPT 환경 변수를 사용하십시오. 예 : XZ_OPT = "-9e -T0".
Dzenly

50

스위치 -J는 최신 시스템에서만 작동합니다. 보편적 인 명령은 다음과 같습니다.

.tar.xz 아카이브를 만들려면

tar cf - directory/ | xz -z - > directory.tar.xz

설명

  1. tar cf - directorydirectory /를 읽고 TAR 형식으로 넣기 시작합니다. 이 작업의 출력은 표준 출력에서 ​​생성됩니다.

  2. | 표준 출력을 다른 프로그램의 입력으로 파이프 ...

  3. ... 일어납니다 xz -z -. XZ는 -z표준 입력 ( -) 에서 아카이브 를 압축 ( ) 하도록 구성되어 있습니다.

  4. 당신의 출력을 리디렉션 xz받는 tar.xz파일.


16
-f로 전달 될 때 "파일에서"를 의미하지는 않습니다 xz. 대신에 짧으며 --force(자세한 내용은 xz (1) 참조) 필요한 경우가 아니면 사용하지 않는 것이 좋습니다.
Eliah Kagan

@EliahKagan 수정되었습니다. 감사.
Wojciech Adam Koszek

2
다중 스레드 압축을 사용하려면 tar cf - directory/ | xz -z -T0 - > directory.tar.xz
-T0

또 다른 장점은 명령 줄에서 압축 수준이나 다른 옵션을 xz에 쉽게 지정할 수 있다는 것입니다. 예를 들어 압축 속도를 높이고 사용할 수있는 크기 -1 -T0-0 -T0옵션으로 많은 신경을 쓰지 않는 경우 , 일반적으로 gzip보다 작은 파일을 비교할 수 있거나 더 빠른 시간에 제공하지만 기본값 -6은 상당히 느립니다. gzip보다.
fgwaller

38

파이프 모드가 마음에 들면 가장 깨끗한 솔루션입니다.

tar c some-dir | xz > some-dir.tar.xz

f파일을 처리하기 위해 옵션 을 넣은 다음 -파일이 표준 입력임을 지정하는 데 사용할 필요는 없습니다. 에 대한 -z옵션도 지정할 필요가 없습니다 xz. 기본값이기 때문입니다.

그것은 작동 gzip하고 bzip2너무 :

tar c some-dir | gzip > some-dir.tar.gz

또는

tar c some-dir | bzip2 > some-dir.tar.bz2

압축 해제도 매우 간단합니다.

xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x

tar아카이브 만있는 경우 다음을 사용할 수 있습니다 cat.

cat archive.tar | tar x

파일 만 나열해야하는 경우을 사용하십시오 tar t.


8

xz 압축 옵션 사용

에 압축 옵션을 사용 xz하거나 tarMacOS에서 사용 하는 경우 tar -cJf구문 을 피할 수 있습니다.

에 따르면 man xz, 이렇게하는 방법은 다음과 같습니다.

tar cf - baz | xz -4e > baz.tar.xz

내가 Wojciech Adam Koszek의 형식을 좋아 했지만 정보 는 좋아하지 않았기 때문에 :

  1. c 지정된 파일에 대한 새 아카이브를 작성합니다.
  2. f디렉토리에서 읽습니다 ( -cf! = 때문에 두 번째로 가장 좋습니다 -fc)
  3. - 표준 출력으로 출력
  4. | 다음 명령으로 파이프 출력
  5. xz -4e압축 옵션을 xz사용하여 호출합니다 -4e. (과 동일 -4 --extreme)
  6. > baz.tar.xz tar 및 압축 파일을 baz.tar.xz

어디에 -4e, 자신의 압축 옵션을 사용하십시오. 내가 자주 사용 -k--keep원본 파일과 -9정말 무거운 압축. 별도의 지시가없는 경우 기본적으로 압축 -z으로 설정 xz되지만 zip 으로 수동 설정 됩니다.

압축을 풀고 untar하려면

Rafael van Horn 을 에코하려면 압축을 풀고 untar하십시오 (아래 참고 참조).

xz -dc baz.tar.xz | tar x

참고 : Rafael의 답변 과 달리 xz -dc대신을 사용하십시오 catxz. 이 문서를 스크립팅에 사용하는 경우 문서에서 권장합니다. -d또는 --decompress대신에 사용하는 습관을 갖는 것이 가장 좋습니다 unxz. 그러나 필요한 경우 명령 행에서 해당 명령을 사용하는 것이 좋습니다.


tar -cJfMacOS 에서 구문을 사용하지 않는 특별한 이유는 무엇입니까? 방금 궁금한 점이 있습니다. 지금 막하고 있었기 때문에 작동하는 것 같습니다.
Lo-Tan

2
@ Lo-Tan tar가 있으면 작동합니다. 내가 그것을 사용할 때 나는 올바른 버전의 타르를 가지고 있지 않아서 나를 위해 작동하지 않았다. 또한 tar를 사용하면 할 수없는 xz의 압축 옵션을 사용하고 싶었습니다. 또한 배관 구문은 기억하기 쉬우므로 사용하는 경향이 있습니다. 그러나 각자 자신에게
Connor

4

이 시도: tar -cf file.tar file-to-compress ; xz -z file.tar

노트 :

  1. tar.gz와 tar.xz는 동일하지 않습니다. xz는 더 나은 압축을 제공합니다.
  2. 파이프 | 는 명령을 동시에 실행하므로 파이프를 사용하지 마십시오 . 명령을 차례로 사용 ;하거나 &실행합니다.

+1 RHEL 5.10에서는 J옵션이 보이지 않지만 작동합니다. RHEL6이 필요하다고 생각합니다.
Brian

2
tar에서 xz로 출력을 파이프하도록 명령을 조정하지 않는 이유는 무엇입니까?
mwfearnley

@mwfearnley 메모는 단지 명령이 순차적으로 실행되어야한다는 것을 강조하기위한 것입니다. 파일 이름은 두 명령 모두에 사용되므로 표준 출력 또는 입력에서 데이터를 쓰거나 읽지 않습니다. 파일 이름을 지정하지 않고 명령을 사용하면 다음과 같이 연결될 수 있습니다 tar -c file-to-compress | xz -z > file.tar.xz.
Jack Q

를 사용 &하면 명령이 차례로 실행되지 않습니다. 대신 백그라운드 프로세스로 첫 번째 프로세스를 시작합니다.
Luis Lavaire
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.