최대 크기의 블록으로 분할 된 tar 아카이브 작성


83

상당히 큰 디렉토리를 백업해야하지만 개별 파일의 크기에 의해 제한됩니다. 본질적 tar.(gz|bz2)으로 200MB 최대 아카이브로 분할 된 아카이브를 만들고 싶습니다 . Clonezilla는 다음과 같은 이름의 이미지 백업을 분할하여 이와 비슷한 작업을 수행합니다.

sda1.backup.tar.gz.aa
sda1.backup.tar.gz.ab
sda1.backup.tar.gz.ac

하나의 명령 으로이 작업을 수행 할 수있는 방법이 있습니까? split명령 을 사용하는 방법을 이해 하지만 하나의 거대한 아카이브를 만든 다음 작은 아카이브로 분할하지 않아도됩니다. 이는 아카이브를 처음 생성하는 데 필요한 디스크 공간을 두 배로 늘리기 때문입니다.


답변:


108

tar 명령을 split 명령으로 파이프 할 수 있습니다.

tar cvzf - dir/ | split --bytes=200MB - sda1.backup.tar.gz.

일부 * nix 시스템 (예 : OS X)에서는 다음 오류가 발생할 수 있습니다.

split: illegal option -- -

이 경우 다음을 시도하십시오 (참고 -b 200m).

tar cvzf - dir/ | split -b 200m - sda1.backup.tar.gz.

FAT32 형식의 드라이브에 맞게 파일을 분할하려는 경우 바이트 제한 4294967295를 사용하십시오. 예를 들면 다음과 같습니다.

tar cvzf - /Applications/Install\ macOS\ Sierra.app/ | \
split -b 4294967295 - /Volumes/UNTITLED/install_macos_sierra.tgz.

3
큰! 그런 다음 아카이브를 추출하려면 어떻게해야합니까?
Naftuli Kay

24
일을 할 것인가 cat sda1.backup.tar.gz.* | tar xzvf -?
Naftuli Kay

3
그렇습니다. split기본적으로 LOCALE로 정렬 할 때 (쉘 globbing에 의해 수행되는) 올바른 순서가되도록 파일 이름을 설정합니다.
jordanm

4
자세한없이 바로 할 tar czf ...를 빼고 v및에 의해 병합 cat backup.tar.gz.* | tar tar xzf - 하지 않고 v. 에 의해 자세한 출력의 이점이 없습니다 v.
Léo Léopold Hertz 준영

1
Xcode를 FAT32 형식의 플래시 드라이브에 포장하여 친구를 도왔습니다 : tar cvzf - Xcode.app/ | split -b 2000m - /Volumes/PH/xcode/xcode.tgz(에서 사용됨 cd /Applications/) 대단히 감사합니다 :)
ecth December

13

macOS에서는 split명령이 약간 다르게 작동합니다.

$ tar cvzf - foo | split -b 2500m - foo.tgz.

4

추가하기 : vfat / fat32의 최대 허용 파일 크기는 2 ^ 32 빼기 1 (4294967295 바이트)이므로 해당 파일 시스템에서 허용되는 최대 파일 크기를 가진 split 명령은 다음과 같습니다.

split -b4294967295 -d my_input_file my_output_file_splitted

3
serega@serega-sv:~$ tar -c  -M --tape-length=1024 --file /tmp/pseudo-tape.tar --new-volume-script=/tmp/new-volume.sh --volno-file=/tmp/volno /tmp/stuff-to-archive 
tar: Removing leading `/' from member names
moving /tmp/pseudo-tape.tar to /tmp/archive.1
moving /tmp/pseudo-tape.tar to /tmp/archive.2
moving /tmp/pseudo-tape.tar to /tmp/archive.3

pseudo-tape.tar 파일을 새로운 이름으로 옮기는 자동화 스크립트가 필요합니다.

serega@serega-sv:~$ cat /tmp/new-volume.sh 
dir="/tmp"
base_name="pseudo-tape.tar"
next_volume_name=`echo -n "archive."; cat $dir/volno`
echo "moving $dir/$base_name to $dir/$next_volume_name"
mv "$dir/$base_name" "$dir/$next_volume_name"

을 사용하는 답변이 기쁘기 때문에 귀하의 답변을 다운 보트하지 않았습니다 -M --tape-length. 그러나이 답변은 gzip 또는 bzip2 압축을 사용하는 솔루션에 대한 OP의 요청을 무시합니다.
sampablokuper

주의 : 당신은 (GNU tar) tar라는 tar 클론에 대해 이야기하고 gtar있습니다. 이 tar 복제본은 다중 볼륨 아카이브 작성을 지원하지만 후속 볼륨이 올바른 연속 파트가 아니라고 잘못 주장하여 다중 볼륨 아카이브에서 추출 할 수없는 가능성이 눈에 probability니다.
schily
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.