모든 하위 디렉토리의 모든 파일을 bash에서 하나의 압축 파일로 압축하는 방법


201

가능한 중복 :
디렉토리 세트를 압축하고 tar 압축 파일 작성

이 포스트 는 디렉토리 구조 내에서 각 파일을 개별적으로 압축하는 방법을 설명합니다. 그러나 약간 다른 것을해야합니다. 특정 디렉토리 아래의 모든 파일에 대해 하나의 큰 gzip 파일을 생성해야합니다. 또한 압축 파일의 출력 파일 이름 (예 : files.gz)을 지정하고 이미 존재하는 경우 이전 압축 파일 파일을 덮어 쓸 수 있어야합니다.


gzip본질적으로 단일 파일 만 압축합니다. 후속 gzipping을 위해 여러 파일을 하나의 파일에 넣으려면을 사용하십시오 tar.
토마스

답변:


387
tar -zcvf compressFileName.tar.gz folderToCompress

folderToCompress의 모든 것은 compressFileName으로 이동합니다

편집 : 검토 및 의견 후 사람들이 확장자없이 compressFileName과 혼동 될 수 있음을 깨달았습니다. 원하는 경우 compressFileName과 함께 .tar.gz 확장명 (제안대로)을 사용할 수 있습니다


2
감사. 이것이 "folderToCompress"아래의 모든 것을 압축합니까 (즉, 재귀 적으로)?
Doug

2
folderToCompress의 모든 compressFileName로 이동합니다
amitchhajer

80
확장명을 compressFileName포함 하도록 선택 .tar.gz하거나 다른 모든 사람들을 미치게 할 것입니다.
drewish

9
이것은 또한 임의의 수의 디렉토리에 적용 tar -zcvf two-dirs.tar.gz dir-one dir-two됩니다.
Zoltán

5
또한 *현재 디렉토리의 모든 것을 압축하기 위해 함께 작동합니다 .tar -zcvf all.tar.gz *

61

재귀 적으로 작동하는 많은 압축 방법이 있으며 최종 사용자가 누구인지 아는 것이 좋습니다.

즉, Windows를 실행하는 누군가에게 보내야한다면 zip이 가장 좋습니다.

zip -r file.zip folder_to_zip

unzip filenname.zip

다른 리눅스 사용자 또는 자기 타르에게 좋습니다.

tar -cvzf filename.tar.gz folder

tar -cvjf filename.tar.bz2 folder  # even more compression

#change the -c to -x to above to extract

타르와 조심해야합니다. 예를 들어 내가 달리면

cd ~
tar -cvzf passwd.tar.gz /etc/passwd
tar: Removing leading `/' from member names
/etc/passwd


pwd

/ home / myusername

tar -xvzf passwd.tar.gz

이것은 / home / myusername / etc / passwd를 생성합니다

tar의 모든 버전이이를 수행하는지 확실하지 않은 경우 :

 Removing leading `/' from member names

18

@amitchhajer의 게시물은 GNU tar에서 작동합니다. 누군가이 게시물을 찾아 NON GNU시스템에서 작동하려면 다음과 같이하십시오.

tar cvf - folderToCompress | gzip > compressFileName

아카이브를 확장하려면

zcat compressFileName | tar xvf -

2
이식성이 뛰어날뿐만 아니라이 솔루션은 인수를 gzip (예 : --test 또는 --best)에 전달하려는 경우 유용합니다. GNU tar조차도 GNU tar는 인수를 gzip으로 보내는 방법을 제공하지 않기 때문입니다.
Timothy Woods

다른 컴프레서를 사용할 수도 있기 때문에 다목적입니다. 예를 들어 pigzCPU를 더 잘 활용할 수 있기 때문에 더 빠릅니다 (멀티 스레드 zip 구현).
Ortwin Angermeier 2014
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.