如何在空间不足的情况下创建分成多个文件的压缩存档

如何在空间不足的情况下创建分成多个文件的压缩存档

我要在 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 脚本,它将所有文件放入几个 tar 包中。

#!/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等)。如果该packageX.tar文件超过一定数量的字节(在本例中该数量为 100MB 或 104857600 字节),那么它将等到用户将文件复制packageX.tar到另一个存储并在用户点击后继续Enter

相关内容