Linux의 .tar.gz 또는 .tar.bz2 파일에서 파일을 추출하는 방법

Tar 파일은 압축된 아카이브입니다. Ubuntu와 같은 Linux 배포판을 사용하거나 macOS에서 터미널을 사용하는 동안에도 자주 접하게 됩니다. 다음은 tarball이라고도 하는 tar 파일의 내용을 추출하거나 압축을 푸는 방법입니다.

.tar.gz 및 .tar.bz2는 무엇을 의미합니까?

확장자가 .tar.gz 또는 .tar.bz2인 파일은 압축된 아카이브 파일입니다. 확장자가 .tar인 파일은 압축되지 않지만 매우 드뭅니다.

파일 확장자의 .tar 부분은 테이프 아카이브를 나타내며 이 두 파일 유형을 모두 tar 파일이라고 하는 이유입니다. Tar 파일은 시스템 관리자가 파일을 테이프에 보관할 수 있도록 tar 명령이 생성된 1979년으로 거슬러 올라갑니다. 40년이 지난 후에도 우리는 여전히 tar 명령을 사용하여 하드 드라이브에 tar 파일을 추출하고 있습니다. 어딘가에 누군가가 여전히 테이프와 함께 tar를 사용하고 있을 것입니다.

.gz 또는 .bz2 확장자는 gzip 또는 bzip2 압축 알고리즘을 사용하여 아카이브가 압축되었음을 나타냅니다. tar 명령은 두 가지 유형의 파일에서 모두 잘 작동하므로 어떤 압축 방법이 사용되었는지는 중요하지 않으며 Bash 셸이 있는 모든 곳에서 사용할 수 있어야 합니다. 적절한 tar 명령줄 옵션을 사용하기만 하면 됩니다.

Tar 파일에서 파일 추출

두 개의 악보 파일을 다운로드했다고 가정해 보겠습니다. 하나의 파일은 ukulele_songs.tar.gz, 다른 하나는 기타_songs.tar.bz2입니다. 이 파일은 다운로드 디렉토리에 있습니다.

우쿨렐레 노래를 추출해 보겠습니다.

tar -xvzf ukulele_songs.tar.gz

파일이 추출되면 터미널 창에 나열됩니다.

우리가 사용한 명령줄 옵션은 다음과 같습니다.

-x: 압축을 풀고 tar 파일에서 파일을 검색합니다.
-v: Verbose, 추출되는 파일을 나열합니다.
-z: Gzip, gzip을 사용하여 tar 파일의 압축을 풉니다.
-f: 파일, tar가 작업할 tar 파일의 이름. 이 옵션 뒤에는 tar 파일 이름이 와야 합니다.

  위젯과 아이콘으로 iPhone 홈 화면을 사용자화하는 방법

ls를 사용하여 디렉토리의 파일을 나열하면 Ukulele Songs라는 디렉토리가 생성되었음을 알 수 있습니다. 추출된 파일은 해당 디렉토리에 있습니다. 이 디렉토리는 어디에서 왔습니까? tar 파일에 포함되어 있었고 파일과 함께 추출되었습니다.

이제 기타 곡을 추출해 보겠습니다. 이를 위해 이전과 거의 동일한 명령을 사용하지만 한 가지 중요한 차이점이 있습니다. .bz2 확장자 접미사는 bzip2 명령을 사용하여 압축되었음을 알려줍니다. -z(gzip) 옵션을 사용하는 대신 -j(bzip2) 옵션을 사용합니다.

tar -xvjf guitar_songs.tar.bz2

다시 한 번, 파일은 압축이 풀릴 때 터미널에 나열됩니다. 분명히 하기 위해 .tar.bz2 파일에 대해 tar와 함께 사용한 명령줄 옵션은 다음과 같습니다.

-x: 압축을 풀고 tar 파일에서 파일을 검색합니다.
-v: Verbose, 추출되는 파일을 나열합니다.
-j: Bzip2, bzip2를 사용하여 tar 파일의 압축을 풉니다.
-f: 파일, tar가 작업할 tar 파일의 이름.

Download 디렉토리의 파일을 나열하면 Guitar Songs라는 다른 디렉토리가 생성되었음을 알 수 있습니다.

파일을 추출할 위치 선택

현재 디렉토리가 아닌 다른 위치에 파일을 추출하려면 -C(지정된 디렉토리) 옵션을 사용하여 대상 디렉토리를 지정할 수 있습니다.

tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/

Documents/Songs 디렉토리를 보면 Guitar Songs 디렉토리가 생성된 것을 볼 수 있습니다.

대상 디렉토리는 이미 존재해야 하며 존재하지 않으면 tar가 생성하지 않습니다. 디렉토리를 생성하고 tar가 하나의 명령으로 파일을 모두 추출하도록 해야 하는 경우 다음과 같이 수행할 수 있습니다.

mkdir -p ~/Documents/Songs/Downloaded && tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/Downloaded/

-p(parents) 옵션은 mkdir이 필요한 모든 상위 디렉토리를 생성하도록 하여 대상 디렉토리가 생성되도록 합니다.

압축을 풀기 전에 Tar 파일 내부 살펴보기

지금까지 우리는 믿음을 버리고 보이지 않는 파일을 추출했습니다. 도약하기 전에 보고 싶을 수도 있습니다. -t(목록) 옵션을 사용하여 압축을 풀기 전에 tar 파일의 내용을 검토할 수 있습니다. 일반적으로 less 명령을 통해 출력을 파이프하는 것이 편리합니다.

tar -tf ukulele_songs.tar.gz | less

파일을 나열하기 위해 -z 옵션을 사용할 필요가 없습니다. .tar.gz 파일에서 파일을 추출할 때 -z 옵션만 추가하면 됩니다. 마찬가지로 tar.bz2 파일에 있는 파일을 나열하기 위해 -j 옵션이 필요하지 않습니다.

  식품 빌더는 재료를 기반으로 영양 정보를 제공합니다.

출력을 스크롤하면 tar 파일의 모든 항목이 Ukulele Songs라는 디렉토리에 보관되어 있고 그 디렉토리 안에 파일과 기타 디렉토리가 있음을 알 수 있습니다.

Ukulele Songs 디렉토리에 Random Songs, Ramones 및 Possibles라는 디렉토리가 포함되어 있음을 알 수 있습니다.

tar 파일 내의 디렉토리에서 모든 파일을 추출하려면 다음 명령을 사용하십시오. 경로에 공백이 있으므로 경로를 따옴표로 묶습니다.

tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/Ramones/"

단일 파일을 추출하려면 파일의 경로와 이름을 제공하십시오.

tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/023 - My Babe.odt"

와일드카드를 사용하여 파일 선택을 추출할 수 있습니다. 여기서 *는 임의의 문자열을 나타내고 ? 단일 문자를 나타냅니다. 와일드카드를 사용하려면 –wildcards 옵션을 사용해야 합니다.

tar -xvz --wildcards -f ukulele_songs.tar.gz "Ukulele Songs/Possibles/B*"

디렉토리를 추출하지 않고 파일 추출

tar 파일의 디렉토리 구조를 하드 드라이브에 다시 생성하지 않으려면 –strip-components 옵션을 사용하십시오. –strip-components 옵션에는 숫자 매개변수가 필요합니다. 숫자는 무시할 디렉터리 수준을 나타냅니다. 무시된 디렉터리의 파일은 여전히 ​​추출되지만 디렉터리 구조는 하드 드라이브에 복제되지 않습니다.

예제 tar 파일과 함께 –strip-components=1을 지정하면 tar 파일 내의 Ukulele Songs 최상위 디렉토리가 하드 드라이브에 생성되지 않습니다. 해당 디렉토리로 추출되었을 파일 및 디렉토리는 대상 디렉토리에서 추출됩니다.

tar -xvzf ukulele_songs.tar.gz --strip-components=1

예제 tar 파일에는 두 가지 수준의 디렉토리 중첩만 있습니다. 따라서 –strip-components=2를 사용하면 대상 디렉토리에 모든 파일이 추출되고 다른 디렉토리는 생성되지 않습니다.

tar -xvzf ukulele_songs.tar.gz --strip-components=2

리눅스를 보면 매뉴얼 페이지 tar가 “가장 많은 명령줄 옵션을 가진 명령”이라는 제목에 적합한 후보임을 알 수 있습니다. 고맙게도 .tar.gz 및 tar.bz2 파일에서 파일을 추출할 수 있도록 하려면 이러한 옵션 중 몇 가지만 기억하면 됩니다.