공간이 부족할 때 여러 파일로 분할된 압축 아카이브를 만드는 방법

공간이 부족할 때 여러 파일로 분할된 압축 아카이브를 만드는 방법

9GB 드라이브에 7GB를 백업하고 싶습니다. 즉, 여유 공간이 약 2GB 밖에 없습니다.

그러나 tar관련 솔루션에서는 먼저 모든 것을 파일에 넣은 다음 분할해야 합니다.

청크별로 원격 드라이브로 전송할 수 있도록 보관(압축할 수도 있지만 반드시 압축할 필요는 없음) 및 분할이 가능합니까?

내 말은

  • 첫 번째 파일이 준비되면 외부 드라이브로 이동하고 시스템에서 삭제하고 싶습니다.

  • 두 번째 파일이 준비되면 이동하겠습니다..

답변1

소스에서 여러 아카이브로 분할합니다.

du를 사용하여 가장 큰 디렉토리 중 일부를 검색하고 먼저 이를 아카이브/압축합니다(tar | gzip 또는 직접 tar 압축 옵션 사용). .tgz 파일을 원격 드라이브에 복사하고 크기를 확인한 후 마스터 디스크에서 삭제하세요.

약 5GB의 파일이 아카이브될 때까지 다른 큰 디렉터리에 대해 이 작업을 반복합니다.

마지막으로 기본 디렉터리를 보관하고 압축하지만 tar의 제외 옵션을 사용하여 보관된 디렉터리의 이름을 지정합니다.

또는 tar 및 gzip을 파이프한 다음 ssh로 파이프하여 원격 드라이브에 쓸 수 있습니다. 다음과 같은 것(옵션 확인):

tar cfz - myBaseDir | ssh myRemote 'cat > myArchive.tg z'

답변2

제가 아는 한, 그런 단어는 없습니다. 그러나 나는 모든 파일을 여러 개의 타르볼에 넣는 작은 bash 스크립트를 작성했습니다.

#!/bin/bash

package_i=1
all_files=$(find . -name "*" -type f)

# stop on every 100 MB for now
max_size=104857600

for f in $all_files; do
        #
        # add file to current tar file
        #
        tar -rvf package${package_i}.tar $f

        #
        # check if the size is more than 100 MB
        # if so, then wait till current package tar
        # was moved by user to another storage
        # and then proceed
        #
        size_of_current_package=$(stat --printf="%s" package${package_i}.tar)
        if [ $size_of_current_package -ge $max_size ]; then
                read -p "Will wait when you moved package${package_i}.tar to another storage ..."
                package_i=$(( $package_i + 1 ))
                echo "=== Package iterator is now '${package_i}' ==="
        fi
done

이 스크립트는 현재 packageX.tar파일에 파일을 하나씩( package1.tarpackage2.tar) 추가합니다. 파일이 특정 바이트 수(이 경우 100MB 또는 104857600바이트)보다 큰 경우 packageX.tar사용자가 파일을 다른 저장소에 복사할 때까지 기다렸다가 packageX.tar사용자가 을 클릭하면 계속됩니다 Enter.

관련 정보