tar 아카이브를 여러 파일로 분할하거나 여러 파일로 분리하는 방법은 무엇입니까?


27

이 페이지 에 따르면 tar는 tar 아카이브를 100Mb 파일로 "분할"할 수 있습니다.

tar -c -M --tape-length = 102400 --file = disk1.tar largefile.tgz

문제는이 명령을 사용하면 첫 번째 파일이 채워진 후 다음 파일의 새 파일 이름을 대화식으로 제공해야합니다.

누구든지이 대화식 단계를 건너 뛰고 tar가 "분할"을 자동으로 수행하는 방법을 알고 있습니까?


답변:


20

--new-volume-script프롬프트 메커니즘을 다른 메커니즘 또는 생성 된 파일 이름으로 바꿀 수 있는 옵션을 살펴보십시오 . ( (tar.info)Multi-Volume Archives에서 tar정보 페이지를 참조하십시오.)의 문제 split당신이 필요로한다는 것입니다 cat다중 볼륨 아카이브가 좀 더 유연해야하는 반면, 아무것도 할 다시 함께 조각.


물론 그렇습니다.
Eduardo I.

2
고마워, 이것이 내가 찾던 것입니다! : 지금 (. 포함 예) 가능 여기에 실제로 몇 가지 지침이 있음을 발견 gnu.org/software/tar/manual/tar.html#Using-Multiple-Tapes
사무엘 Lampa

이것의 문제는 지나치게 말도 안되고 적절한 유닉스 스타일 앱의 반대를 촉진한다는 것입니다.
Jan Kyu Peblik

33

이것을 위해 split을 사용할 수 있습니다 :

tar czpvf - /path/to/archive | split -d -b 100M - tardisk

이것은 tar에게 데이터를 stdout으로 보내고, 분할하여 stdin에서 선택하도록합니다-추가적으로 숫자 접미사 ( -d), 청크 크기 ( -b) 100M 및 결과 파일 이름 (tardisk00, tardisk01, tardisk02 등).

나중에 데이터를 추출하려면 다음을 사용할 수 있습니다.

cat tardisk* | tar xzpvf -

1
작은 수정 -d은 접두사가 아닌 숫자 접미사입니다.
yclian

8

물론 가장 좋은 옵션은 --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디렉토리 트리 구조를 시도하는 경우


1

다음 명령으로 작동하도록했습니다.

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)번째 부분. 쉘 스크립트로 이것을 고치는 것은 사소한 것이며 독자를위한 연습으로 남았습니다.


1

tar 크기가 더 큰 경우 자동으로 1.1GB 크기의 파일을 작성합니다. 예를 들어 1000 {2..1000}과 같이 숫자를 늘리거나 테이프 길이 인수에 대한 입력을 늘릴 수 있습니다.

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.