최대 크기의 블록으로 분할 된 tar 아카이브 작성 상당히 큰 디렉토리를 백업해야하지만 개별 파일의

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

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

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



답변

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.

답변

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

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

답변

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

split -b4294967295 -d my_input_file my_output_file_splitted

답변

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"