Unix에서 폴더를 압축하려고합니다. gzip 명령을 사용하여 수행 할 수 있습니까?
댓글
tar
를 사용하세요. 압축 옵션을 지원합니다. . gzip
는 대체가 아닌 tar
를 보완하도록 설계되었습니다. comment
가 그의 질문에 대한 답이 아니 었으므로 1
및 2
playground
폴더 아래 . gzip -r ./playground
는 1.gz
및 2.gz
(더 이상 1
및 2
파일) playground
폴더 아래에 있으며 모든 항목이 포함 된 압축 파일이 아닙니다. 답변
아니요.
zip
와 달리 gzip
는 압축 알고리즘으로 만 기능합니다.
테이프 드라이브 시대로 거슬러 올라가는 다양한 이유 때문에 Unix는 tar
라는 프로그램을 사용하여 데이터를 보관 한 다음 압축 프로그램으로 압축 할 수 있습니다. gzip
, bzip2
, 7zip
등
디렉토리를 “압축”하려면 올바른 명령은 다음과 같습니다.
tar -zcvf archive.tar.gz directory/
이것은 tar
에
p>
-
z (gzip) 알고리즘을 사용하여 압축
-
c (만들기) (
tar
는 기본적으로 재귀 적입니다.) -
v (상세) 목록 (/ dev / stderr 따라서 파이프 명령에 영향을주지 않음) 아카이브에 추가하는 모든 파일.
-
출력을 로 저장합니다.
archive.tar.gz
라는 이름의 f (파일) > tar
명령은 순전히 편의를 위해 gzip
지원 (-z
플래그를 통해)을 제공합니다. . gzip
명령 / lib는 완전히 분리되어 있습니다. 위의 명령은 사실상 동일합니다.
tar -cv directory | gzip > archive.tar.gz
아카이브의 압축을 풀고 현재 디렉토리에 압축을 풀려면
tar -zxvf archive.tar.gz
이 명령은
gunzip < archive.tar.gz | tar -xv
tar
에 많은 다른 옵션과 용도도 있습니다. 언젠가 맨 페이지를 읽어 보는 것이 좋습니다.
댓글
- 더 명확하게하기 위해 이것은 . 결과 아카이브는
tar -zxvf
또는zcat file.tar.gz | tar -xv
로 추출 할 수 있습니다. 중요한 점은 tar가 gzip과 완전히 독립적이라는 점입니다.tar
명령은 편의상 gzip 지원 만 포함합니다. - . 참고할 사항 : Windows (
7-zip
지정)를 사용하여*.tar.gz
파일의 압축을 풀면 두 라운드가 걸립니다. 하나는*.tar.gz
파일을*.tar
파일로 압축 해제하고 다음 하나는 tar 파일을 원본 콘텐츠로 압축 해제합니다. 특히 대용량 파일 (예 : 로그)의 경우 총 압축 해제 시간이 늘어납니다. - 아카이브 이름 지정이 시스템에 영향을 미칩니 까? 사람들에게 원래 압축에 사용 된 알고리즘 (따라서 .gz)을 알리는 것이 좋을 것이라는 것을 알고 있지만 그 외에는 아카이브 이름을 지정하는 것이 실제로 중요합니까?
- @hello_there_andy 대부분의 유닉스와는 다르지만, 윈도우 (리눅스의 스마트 탭 완성)는 파일 이름 확장자를 기반으로 가정합니다.
- @vadimkotov 이것이 당신의 일일 수 있습니다. ' re superuser.com/questions/168749/ …
Answer
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
답변
“[Linux에서] gzip을 사용하여 전체 폴더를 압축 할 수 있습니까?”라는 질문에 대한 답변 gzip 대신 zip
프로그램을 다음 구문과 함께 사용할 수 있습니다.
zip -r <zip file name> <folder to zip>
Comments
- @JeffSchaller : 답입니다. 엄청나게 잘못된 것입니다 (저는 믿습니다).하지만 분명히 답입니다.
- @ize : I ' 당신이 게시 한 명령은 그렇지 않습니다. 사실, gzip을 사용하십시오.
- 질문과 같이 zip을 사용하는 것에 대한 포인트, 대부분의 경우 작성자가 알고 싶었을 것입니다. ' 정확한 작업을 수행 할 수 있습니다. 그가 창문에서했던 것과 똑같은 일. 대부분의 사람들이 ' 멀리 생각하고 싶지 않다는 것은 슬픈 일입니다.
- 질문이 “gzip 사용”을 지정하면 까다 롭습니다.
- ' 제품 (zip 파일)이 방법 (gzip 사용)보다 더 중요하다고 생각하기 때문에이 답변에 찬성합니다.
답변
다음 두 명령을 스크립팅했습니다.
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 {} \;
(찾기 명령에주의하고-exec echo {}
먼저 캡처하고 ' '를 캡처하고 있지 않은지 확인합니다 ./' PARENT 디렉토리를 압축하여 전체 홈 디렉토리를 깨뜨릴 수 있습니다.
Answer
pigz
( GZip의 병렬 구현 )
tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz
를 사용하는 것이 좋습니다.
코멘트
- 나도 많이 사용하지만 (및 pixz) 파이프 및 출력 리디렉션이 작동 할 때 작동합니까?
답변
Linux tar가 -z
옵션을 지원하지 않는 경우 다음을 사용할 수 있습니다.
tar -cvf - dir | gzip > dir.tar.gz
Answer
bac에 파일을 tar하고 싶습니다. kground, @Shadur “의 대답을 사용하고 끝에 &
를 추가합니다.
tar -zcvf archive.tar.gz directory/ &
gzip -r myfolder
를 사용할 수 있습니다. 동일한 방법으로gunzip -r myfolder