이 페이지 에 따르면 tar는 tar 아카이브를 100Mb 파일로 "분할"할 수 있습니다.
tar -c -M --tape-length = 102400 --file = disk1.tar largefile.tgz
문제는이 명령을 사용하면 첫 번째 파일이 채워진 후 다음 파일의 새 파일 이름을 대화식으로 제공해야합니다.
누구든지이 대화식 단계를 건너 뛰고 tar가 "분할"을 자동으로 수행하는 방법을 알고 있습니까?
이 페이지 에 따르면 tar는 tar 아카이브를 100Mb 파일로 "분할"할 수 있습니다.
tar -c -M --tape-length = 102400 --file = disk1.tar largefile.tgz
문제는이 명령을 사용하면 첫 번째 파일이 채워진 후 다음 파일의 새 파일 이름을 대화식으로 제공해야합니다.
누구든지이 대화식 단계를 건너 뛰고 tar가 "분할"을 자동으로 수행하는 방법을 알고 있습니까?
답변:
--new-volume-script
프롬프트 메커니즘을 다른 메커니즘 또는 생성 된 파일 이름으로 바꿀 수 있는 옵션을 살펴보십시오 . ( (tar.info)Multi-Volume Archives
에서 tar
정보 페이지를 참조하십시오.)의 문제 split
당신이 필요로한다는 것입니다 cat
다중 볼륨 아카이브가 좀 더 유연해야하는 반면, 아무것도 할 다시 함께 조각.
이것을 위해 split을 사용할 수 있습니다 :
tar czpvf - /path/to/archive | split -d -b 100M - tardisk
이것은 tar에게 데이터를 stdout으로 보내고, 분할하여 stdin에서 선택하도록합니다-추가적으로 숫자 접미사 ( -d
), 청크 크기 ( -b
) 100M 및 결과 파일 이름 (tardisk00, tardisk01, tardisk02 등).
나중에 데이터를 추출하려면 다음을 사용할 수 있습니다.
cat tardisk* | tar xzpvf -
-d
은 접두사가 아닌 숫자 접미사입니다.
물론 가장 좋은 옵션은 --new-volume-script
옵션입니다.
그러나 파일 크기 (이 경우 largefile.tgz)를 알고 있으면 다음을 수행 할 수도 있습니다.
tar -c -M -L 102400 --file=disk1.tar --file=disk2.tar --file=disk3.tar largefile.tgz
개요:
-c = Create
-M = multi-volume
-L 102400 = 100MB files (disk1.tar, disk2.tar, disk3.tar ...)
(-L의 경우 tar 파일의 총 합이 largefile.tgz보다 크도록 필요한 수를 지정하십시오.)
tar
디렉토리 트리 구조를 시도하는 경우
다음 명령으로 작동하도록했습니다.
mkdir -p ./split
rm -rf ./split/*
tar -cML 102400 -F 'cp "${TAR_ARCHIVE}" \
./split/part_${TAR_VOLUME}.tar' \
-f split/part_1.tar large_file.tar.gz
유일한 문제는 part_1.tar
실제로 마지막 파일이되고 다른 파일은 한 파일 씩 이동 한다는 것입니다. 즉 part_2.tar
실제로는 첫 번째 부분이고, part_k.tar
는 IS (n - 1)
번째 부분. 쉘 스크립트로 이것을 고치는 것은 사소한 것이며 독자를위한 연습으로 남았습니다.