Computer >> 컴퓨터 >  >> 시스템 >> Linux

우분투(Ubuntu)에서 대용량 파일을 압축하고 분할하는 방법

우분투(Ubuntu)에서 대용량 파일을 압축하고 분할하는 방법

대부분의 최신 리눅스 배포판과 마찬가지로 우분투(Ubuntu)에도 일상적인 작업에 필요한 다양한 도구가 기본으로 탑재되어 있습니다. 그중에는 파일을 압축 패키지로 만들어 보관할 수 있는 '아카이브 관리자(Archive Manager)'도 포함되어 있습니다. 하지만 한 가지 아쉬운 점이 있다면, 압축을 했음에도 불구하고 결과물이 여전히 원하는 크기보다 클 수 있다는 것입니다. 이럴 때 가장 효과적인 해결책은 파일을 압축한 뒤 더 작은 단위로 분할하는 것입니다.

우분투에는 이러한 작업을 위한 도구가 기본적으로 포함되어 있지만, 안타깝게도 아카이브 관리자만으로는 이런 작업을 처리하기에 부족합니다. 따라서 터미널을 활용해야 합니다. 다행히 과정 자체는 어렵지 않으며, 단 하나의 명령어로 파일을 압축하고 작은 조각들로 나눌 수 있습니다. 지금부터 차근차근 살펴보겠습니다.

압축의 기본 원리 이해하기

본격적으로 시작하기 전에, 작업 시간을 크게 아껴줄 중요한 사실 하나를 먼저 짚고 넘어가겠습니다. 바로 '압축은 중첩되지 않는다'는 점입니다.

쉽게 말해, 이미 고도로 압축된 파일들을 다른 압축 방식으로 다시 압축해도 용량이 눈에 띄게 줄어들지 않습니다. JPG 이미지, MP4 동영상 파일처럼 이미 압축률이 높은 파일이나 기존 압축 아카이브를 공유하려는 경우라면, 최고 압축률 설정을 사용할 필요가 전혀 없습니다. 오히려 압축 없이 '저장(store)' 모드로 아카이브에 담는 것이 더 빠르고 효율적입니다.

반면 TXT 텍스트 파일, 대형 데이터베이스, 비압축 미디어처럼 압축이 되어 있지 않거나 압축률이 낮은 파일이라면, 최고 압축 설정을 적용했을 때 파일 크기를 획기적으로 줄일 수 있습니다.

클래식 리눅스 방식: tar + split + bzip

예를 들어 Windows 10 ISO 파일처럼 용량이 큰 파일을 압축한다고 가정해 보겠습니다. tar, split, bzip 같은 전통적인 리눅스 도구를 활용하면 파일을 압축하면서 동시에 작은 파일들로 분할할 수 있습니다.

우분투(Ubuntu)에서 대용량 파일을 압축하고 분할하는 방법

1. 터미널을 실행합니다. 가장 빠른 방법은 CTRL + ALT + T 키를 누르는 것입니다. 그다음, 분할 압축하려는 대용량 파일이 있는 폴더로 이동합니다. 작업 내용을 깔끔하게 정리하기 위해 분할된 아카이브를 보관할 'split'이라는 하위 폴더를 생성합니다.

mkdir split
우분투(Ubuntu)에서 대용량 파일을 압축하고 분할하는 방법

생성한 폴더로 이동합니다.

cd split
우분투(Ubuntu)에서 대용량 파일을 압축하고 분할하는 방법

2. 다음 명령어로 파일이나 폴더를 압축하여 분할 아카이브로 만듭니다.

tar -cvj FILENAME | split -b SIZE_OF_PARTS -d - "BASE NAME OF ARCHIVE"

Windows 10 ISO 파일을 예로 들면, 실제 명령어는 다음과 같습니다.

tar -cvj ~/Data/Windows10.iso | split -b 50m -d - "Windows10_ISO.tar.bz."
  • ~/Data/Windows10.iso: 압축하려는 파일의 경로와 파일명입니다.
  • split -b 50m: 아카이브를 50MB 크기의 조각으로 나눈다는 의미입니다. 원하는 크기에 맞게 값을 변경하세요.
  • Windows10_ISO.tar.bz.: 분할된 아카이브 파일들의 기본 파일명입니다. 끝에 마침표(.)가 하나 더 붙어 있는데, 이는 각 조각 파일 이름 끝에 순번을 나타내는 숫자가 추가되기 때문입니다.
우분투(Ubuntu)에서 대용량 파일을 압축하고 분할하는 방법

파일 크기와 컴퓨터 성능에 따라 다소 시간이 걸린 후, split 하위 폴더에서 분할된 아카이브 조각들을 확인할 수 있습니다.

우분투(Ubuntu)에서 대용량 파일을 압축하고 분할하는 방법

조각들의 총 용량을 확인해 보면, 압축 전 원본보다 작아진 것을 알 수 있습니다.

우분투(Ubuntu)에서 대용량 파일을 압축하고 분할하는 방법

원본 파일을 복원하는 방법: 먼저 모든 조각을 하나의 아카이브로 다시 합칩니다.

cat BASE_NAME_OF_PARTS.* > BASE_NAME_OF_PARTS.bz

그다음 아카이브의 내용을 추출합니다.

tar -xvj REASSEMBLED_ARCHIVE.bz

위 예제의 경우 두 명령어는 각각 다음과 같습니다.

cat Windows10_ISO.tar.bz.*
tar -xvj Windows10_ISO.tar.bz

하지만 다음 섹션에서 소개할 최신 압축 도구를 사용하면 더욱 편리하게 처리할 수 있습니다.

현대적인 고효율 압축 솔루션: 7-Zip

7-Zip은 높은 압축률을 제공하는 현대적인 아카이버로, 분할 아카이브 기능까지 기본 지원합니다. 따라서 이번 작업에는 더 나은 선택지가 됩니다. 다만 우분투에는 기본 설치되어 있지 않으므로, 리눅스 버전인 p7zip을 먼저 설치해야 합니다.

sudo apt install p7zip-full
우분투(Ubuntu)에서 대용량 파일을 압축하고 분할하는 방법

7-Zip으로 분할 압축 아카이브를 만드는 것은 앞서 소개한 기본 방식보다 훨씬 간단합니다. 분할 파일의 크기, 아카이브 파일명, 압축할 대상만 지정하면 됩니다.

7z -vSIZE_OF_SPLIT_FILES a ARCHIVE_FILENAME FILE_TO_COMPRESS

Windows 10 ISO를 각 파트가 50MB인 분할 아카이브로 압축하는 명령어는 다음과 같습니다.

7z -v50m a Windows10_iso.7z ~/Data/Windows10.iso
우분투(Ubuntu)에서 대용량 파일을 압축하고 분할하는 방법

잠시 후 split 하위 폴더에서 결과물을 확인할 수 있으며, tar-split-bzip 방식보다 더 작은 용량을 차지하는 것을 볼 수 있습니다.

우분투(Ubuntu)에서 대용량 파일을 압축하고 분할하는 방법

파일을 복원하는 방법: 시퀀스의 첫 번째 파일만 추출하면, 7z가 나머지 조각들을 자동으로 처리해 줍니다.

7z e FIRST_PART_OF_COMPRESSED_ARCHIVE

위 예제의 경우 다음과 같습니다.

7z e Windows10_iso.7z.001

참고로 요즘은 pigz나 plzip 같은 도구를 활용하면 더 다양한 방식으로 고성능 압축 아카이브를 만들 수 있습니다.

분할 압축 아카이브가 실무에서 유용하게 느껴지셨나요? 평소 어떤 압축 도구를 사용하고 계신지 댓글로 알려주세요.