하우투 파이프 : cp | 타르 | 중간 파일을 만들지 않고 gzip?


31

파이프가 가능한지 말해 줄 수있는 사람 | A와 B.tar.gz 사이에 물리적 파일을 만들 필요없이?

이것이 내가하려고하는 일입니다.

  1. 파일 A
  2. A를 B로 이름 바꾸기
  3. 타르 B. 타르
  4. gzip -9 B.tar.gz

예를 들어 :

cp A B | tar cvf - B | gzip -9 B.tar.gz
gzip  pipe  tar 

왜 파이프를 원 cp A B하십니까?
Dor

1
이름 바꾸기는 mv입니다.
Karoly Horvath

3
복사하려는 이유를 설명하세요 AB처음.
발언자

답변:


42

다음 예제는 중개 파일 작성을 피하기 위해 사용할 수 있습니다.

gzip을 포함한 타르 :

tar cf - A | gzip -9 > B.tar.gz

타르가없는 gzip :

gzip -9c A > B.gz

gzip이없는 타르 :

tar cf B.tar A

이름 바꾸기 (이동) AB먼저 나에게 이해가되지 않습니다. 이 의도되는 경우, 단지를 넣어 mv A B &&위의 명령과 교환하기 전 AB있다.

tar 및 gzip을 사용한 예 :

mv A B && tar cf - B | gzip -9 > B.tar.gz


1
이것은 정확하며 그와 같이 표시되어야합니다. 파이프 옵션의 경우 "tar"뒤에 "-"를 포함해야합니다. 그렇지 않으면 "tar : 빈 아카이브 작성을 거부합니다"라는 메시지가 나타납니다.
Adambean

6

tar 버전에 따라 다릅니다.

멤버 변환 (--transform 또는 --xform)을 지원하는 버전이있는 경우 간단하게 수행 할 수 있습니다.

tar -c --transform=s/A/B/ A | gzip -9 > B.tar.gz

| tar가 -z 옵션을 지원하면 gzip -9> B.tar.gz를 피할 수 있습니다

tar -zcvf B.tar.gz --transform=s/A/B/ A

tar 버전이 --transform을 지원하지 않으면 먼저 파일을 복사해야합니다. 예 :

 cp A B && tar -zcvf B.tar.gz B

그러나 하나의 파일 만 압축하는 경우 tar 부분을 모두 건너 뛰고하지 마십시오.

cat A | gzip -9 > B.gz

예제에서했던 것처럼 cp를 사용했지만 이름은 mv입니다.

0

cp다른 이름 / 위치로 사본을 만드는 데 사용 하는 경우 완성 된 .gzip 파일을 만들 때 원하는 전체 / 최종 경로 이름 만 포함하십시오.

tar -cvf existing.file | gzip -1 > ./newdirectory/newnamed.file.tgz

이것은 작동하지 않으며 "tar : 텅 빈 아카이브 생성을 거부합니다".
Adambean

@Adambean 어쩌면 사용하고 싶 tar -czf - some-folder > some-archive.tar.gz습니까?
tsauerwein

1
@tsauerwein, 예, 14 개월 전에 아래 답변에 대한 답장을
봅니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.