6GB TAR 파일을 별도의 1.9GB TAR 파일로 분할

6GB TAR 파일을 별도의 1.9GB TAR 파일로 분할

내 디렉토리에는 크기가 6.7GB인 파일이 28,000개 있습니다 aaa/input.

aaa/output각 TAR 파일이 1.9GB를 초과할 수 없도록 디렉터리에 TAR 파일을 생성해야 하므로 아래와 같이 28,000개의 파일을 4개의 TAR 파일(6.7/1.9)로 압축해야 합니다.

Log_(current date)_01.tar
Log_(current date)_02.tar
...
etc.

각 타르볼을 1.9GB보다 작게 유지하십시오.

Unix 스크립트를 사용하여 이를 수행할 수 있는 방법이 있습니까?

답변1

tar다음을 조합하여 split이를 달성 할 수 있습니다 .

tar cf - aaa/input | split --bytes=1900m --filter='gzip > $FILE.gz' --numeric-suffixes - ./Log-

이 명령은 tarstdout에 대한 아카이브를 생성하고 출력을 split1900MB마다 분할하는 명령으로 파이프하고, gzip을 통해 데이터를 필터링하고, stdin을 입력(the -)으로 사용하고 출력을 접두사와 함께 현재 디렉터리에 배치합니다.Log-

출력은 다음과 같습니다.

./Log-00.gz
./Log-01.gz
..

split입력이 1900M로 분할되고 압축 후에는 작아지기 때문에 파일 크기가 더 작아집니다 .

아니면 당신은 사용할 수 있습니다

printf 'n Log-%02d.tar\n' {2..4}|tar cf Log-01.tar -ML1900m aaa/input

아카이브를 만듭니다.

n명령의 첫 번째 명령은 다음 아카이브의 새 이름을 printf나타냅니다 . tar이것이 범위가 2부터 시작되는 이유입니다.

일반적으로 tar가 새 아카이브를 묻는 메시지를 표시하면 다음이 표시됩니다.

Prepare volume #2 for '<my tar file>' and hit return:

누르면 ?다음과 같은 단축 메뉴가 나타납니다.

 n name        Give a new file name for the next (and subsequent) volume(s)
 q             Abort tar
 y or newline  Continue operation
 !             Spawn a subshell
 ?             Print this list

답변2

GNU tar를 실행할 수 있으면 옵션 --tape-length=N및 .--new-volume-script

볼륨을 생성하는 명령은 다음과 같습니다.

tar cvf volume /path/to/files --tape-length=1945M --new-volume-script=/path/to/script.sh

그리고 그것으로부터 모든 것을 추출합니다:

tar xvf volume --new-volume-script=/path/to/script.sh

~을 위한새 볼륨 스크립트다음 중 하나를 사용할 수 있습니다(targnu.org 문서). 볼륨 생성, 나열, 비교 및 ​​추출과 함께 작동합니다. 또는 이를 수정하여 볼륨 이름을 변경하거나 처음부터 자신만의 볼륨 이름을 작성할 수 있습니다. 사용 가능한 환경 값은 매뉴얼 페이지를 확인하십시오.

#! /bin/bash
# For this script it's advisable to use a shell, such as Bash,
# that supports a TAR_FD value greater than 9.

echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE.

name=`expr $TAR_ARCHIVE : '\(.*\)-.*'`
case $TAR_SUBCOMMAND in
-c)       ;;
-d|-x|-t) test -r ${name:-$TAR_ARCHIVE}-$TAR_VOLUME || exit 1
          ;;
*)        exit 1
esac

echo ${name:-$TAR_ARCHIVE}-$TAR_VOLUME >&$TAR_FD

관련 정보