gzip을 사용하여 전체 폴더를 압축 할 수 있습니까?


407

유닉스에 폴더를 압축하려고합니다. gzip 명령을 사용하여 수행 할 수 있습니까?


6
gzip -r myfoldergzip 파일을 재귀 적으로 사용할 수 있습니다 . 파일을 압축 해제 할 수있는 것과 같은 방법으로 gunzip -r myfolder 파일을 재귀 적으로 압축 해제합니다. 자세한 내용은 man gzip
Valentin Bajrami

12
사용 tar; 압축 옵션을 지원합니다. 의 대체물이 아닌 gzip의 보완 물로 설계되었습니다 tar.
devnull

13
@ val0x00ff의 제안은 거의 확실하게 달성하려는 것이 아닙니다.
Shadur

4
@Shadur는 이것이 comment그의 질문에 대한 답변이 아니기 때문에 게시 한 이유 입니다.
Valentin Bajrami

2
@Shadur가 의미하는 바를 소중히 여깁니다. 주어진 파일 12폴더 아래 playground. gzip -r ./playground당신을 줄 것 1.gz2.gz(더 이상 12폴더에 파일을) playground그 모든 것을 함께하지 압축 파일을.
Jeff Xiao

답변:


661

아니.

달리 zip, gzip압축 알고리즘으로서 기능 .

때문에 그 중 일부는 다시 테이프 드라이브의 시대에 귀를 기울 다양한 이유, 유닉스라는 이름의 프로그램을 사용하여 tar다음과 같은 압축 프로그램으로 압축 할 수있는 데이터를 보관, gzip, bzip2, 7zip, 등

디렉토리를 "zip"으로 만들려면 올바른 명령은 다음과 같습니다.

tar -zcvf archive.tar.gz directory/ 

이것은 말할 tar것이다

  • z (gzip) 알고리즘을 사용하여 압축

  • c 파일의 아카이브를 (생성) directory( tar기본적으로 재귀)

  • v 아카이브에 추가하는 모든 파일을 v (자세하게) 나열합니다 (/ dev / stderr에 파이프 명령에 영향을주지 않음).

  • 출력을 f (파일) 로 저장하십시오.archive.tar.gz

tar명령은 편의상 순전히 (플래그 gzip를 통해 -z) 지원을 제공 합니다. gzip명령 / lib에 완전히 별개입니다. 위의 명령은 사실상

tar -cv directory | gzip > archive.tar.gz

압축을 풀고 사용하려는 현재 디렉토리로 압축을 풉니 다.

tar -zxvf archive.tar.gz

그 명령은 사실상

gunzip < archive.tar.gz | tar -xv

tar많은, 많은, 많은 다른 옵션들과 사용들; 언젠가 맨 페이지를 읽는 것이 좋습니다.


51
일을 더욱 명확하게하기 위해 이것은 정확히 똑같습니다 tar -cv directory | gzip > archive.tar.gz. 그런 다음 결과 아카이브를 tar -zxvf또는 로 추출 할 수 있습니다 zcat file.tar.gz | tar -xv. tar는 gzip과 완전히 독립적이므로 tar명령에는 편의를 위해 gzip 지원 만 포함됩니다.
Patrick

나는 tar cvzf꽤 오랫동안 사용되었습니다 . 한가지주의 할 점 : Windows ( 7-zip지정)를 사용하여 *.tar.gz파일의 압축을 풀면 두 단계가 걸립니다. 하나는 *.tar.gz파일로 파일 을 압축 해제 *.tar하고 다른 하나는 해당 tar 파일을 원래 내용으로 압축 해제합니다. 특히 큰 파일 (예 : 로그)의 경우 전체 압축 해제 시간이 증가합니다.
Jeff Xiao

1
아카이브의 이름이 기계적으로 영향을 미칩니 까? 사람들에게 원래 압축에 사용 된 알고리즘 (따라서 .gz)을 알려 주면 좋을 것입니다. 그러나 그 외에는 실제로 아카이브 이름을 지정하는 방법이 중요합니까?
hello_there_andy

3
@hello_there_andy 대부분의 유닉스와 차이가 없지만 윈도우 (및 리눅스의 스마트 탭 완성)는 파일 이름 확장자를 기반으로 가정합니다.
Shadur

1
@vadimkotov 이것은 당신이 찾고있는 것일 수도 있습니다 : superuser.com/questions/168749/…
Shadur

47

gzip사용하는 경우 명령은 재귀 적으로 하나의 압축 파일로 디렉토리를 압축하지 않습니다 -r스위치를. 오히려 그 디렉토리 구조를 따라 가서 찾은 각 파일을 별도의 파일로 압축합니다.

전에

$ tree dir1/
dir1/
|-- dir11
|   |-- file11
|   |-- file12
|   `-- file13
|-- file1
|-- file2
`-- file3

이제 gzip명령을 실행

$ gzip -r dir1

$ tree dir1/
dir1/
|-- dir11
|   |-- file11.gz
|   |-- file12.gz
|   `-- file13.gz
|-- file1.gz
|-- file2.gz
`-- file3.gz

디렉토리 구조 tar를 압축하려면 명령 을 사용한 다음 결과 .tar파일 을 압축 할 수 있습니다.

$ tar zcvf dir1.tar.gz dir1/

$ tar zcvf dir1.tar.gz dir1/
dir1/
dir1/file1
dir1/file2
dir1/dir11/
dir1/dir11/file11.gz
dir1/dir11/file12.gz
dir1/dir11/file13.gz
dir1/file3

다음과 같은 단일 파일이 생성됩니다.

$ ls -l | grep tar
-rw-rw-r-- 1 saml saml  271 Oct  1 08:07 dir1.tar.gz

내용을 확인할 수 있습니다.

$ tar ztvf dir1.tar.gz 
drwxrwxr-x saml/saml         0 2013-10-01 08:05 dir1/
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file1
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file2
drwxrwxr-x saml/saml         0 2013-10-01 08:04 dir1/dir11/
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file11.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file12.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file13.gz
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file3

4

이 두 명령을 스크립팅했습니다.

gzipdir:

#!/bin/bash
if [[ -d $1 ]]; then
    cd "$1"
    cd ..
    base=$(basename "$1")
    tar -zcvf "$base.tgz" "$base"
    if [[ $? == 0 && -f "$base.tgz" ]]; then
        rm -rf "$base"
    fi
else
    echo "Usage: $0 DIRECTORY";
fi

ungzipdir:

#!/bin/bash
if [[ -f $1 ]]; then
    base=${1%%.*}
    file=$(basename "$1");
    dir=$(basename "$base");
    if [[ ! -d $base ]]; then
        mkdir "$base"
        cd "$base"
        cd ..
        tar -xvf "$file"
        if [[ $? == 0 && -d "$dir" ]]; then
            rm -f "$file"
        fi
    else
        echo "Directory $base already exists. Nothing done."
    fi
else
    echo "Usage: $0 file.tgz";
fi

(!!!) 사용하기 전에 테스트하십시오 ( 'rm -f'가 있기 때문에 드문 방법으로 중요한 데이터를 제거 할 수 있습니다)

사용하는 방법:

cd /home/; gzipdir MyDirectory 또는 gzipdir /home/MyDirectory

/home/MyDirectory.tgz를 생성하고 성공시 MyDirectory를 제거합니다 (!!!).

ungzipdir /home/MyDirectory.tgz

성공시 / home / MyDirectory를 만들고 /home/MyDirectory.tgz를 제거합니다.


디렉토리에있는 모든 파일을 압축하려면 : find ./* -maxdepth 0 -type d -exec gzipdir {} \; (find 명령에주의하고, -exec echo {}먼저 테스트하고 , ./ '를 캡처하지 않는지 확인하십시오. 이는 PARENT 디렉토리를 압축하여 전체 디렉토리를 손상시킬 수 있습니다.)
Andrew Lorien

1

내가 사용하는 것이 좋습니다 pigz( Gzip으로의 병렬 구현 )

tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz


나는 그것을 너무 많이 사용하지만 파이프와 출력 리디렉션이 작동 할 때 작동합니까?
Michael Wolf

1

"Linux에서 zip을 사용하여 전체 폴더를 압축 할 수 있습니까?"라는 질문에 대한 대답은 다음 구문을 사용하는 것입니다.

zip -r <zip file name> <folder to zip>

새로운 질문이 있으면 질문하기 버튼 을 클릭하여 질문하십시오 . 컨텍스트를 제공하는 데 도움이되는 경우이 질문에 대한 링크를 포함하십시오. - 검토에서
Jeff Schaller

2
@ JeffSchaller : 이것이 답입니다. 그것은 몹시 잘못된 것입니다 (믿습니다). 그러나 분명히 대답입니다.
Scott

1
@ize : 당신이 게시 한 명령이 실제로 gzip을 사용하지 않는다고 확신합니다.
dhag

1
질문과 같이 zip을 사용하는 요점은 아마도 저자가 창문에서했던 것처럼 정확한 것을 수행하는 것이 가능하다는 것을 알고 싶었을 것입니다. 대부분의 사람들이 멀리 생각하고 싶지 않은 것은 슬픈 일입니다.
Florian Heigl

2
질문에 "gzip 사용"이 명시되어 있으면 까다 롭습니다.
Jeff Schaller

1

완벽하게 백그라운드에서 파일을 tar하려면 @Shadur의 답변을 사용 &하고 끝에 추가 하십시오.

tar -zcvf archive.tar.gz directory/ &

0

Linux tar가 -z옵션을 지원하지 않는 경우 다음을 사용할 수 있습니다.

tar -cvf - dir | gzip > dir.tar.gz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.