我可以限制要包含在目录中的tar中的文件大小以包含原子文件吗?

时间:2017-06-28 10:01:55

标签: shell tar

我有一个目录,其中包含多个不同大小的文件

a.txt
b.txt
c.txt

我想限制创建多个具有最大固定大小(例如100 MB)的tar文件。这样整个文件都包含在tar中或者不包含在tar中(如果文件大小大于固定大小可能会抛出错误)

我知道分裂功能:

  • 创建tar
  • 分割所需的块大小

上述方法的问题是无法单独提取生成的tar文件。

任何人都可以帮助解决方案(或提供替代解决方案)

1 个答案:

答案 0 :(得分:0)

以下脚本需要两个或多个参数。首先是总大小 要使用的文件集。传递剩下的参数以便找到你 可以将目录作为参数。该脚本假定文件名 是“表现良好”,不包含空格,换行符或任何内容 否则会混淆shell。

该脚本打印出适合给定大小的最大文件。这个 不一定是最耗费空间的文件集,但发现它 在一般情况下有效率是背包问题,我不太可能 在这里解决。

您可以将sort -rn更改为sort -n以从最小的开始 文件首先。

#!/bin/sh

avail=$1
shift
used=0

find "$@" -type f -print | xargs wc -c | sort -rn | while read size fn; do
        if expr $used + $size '>' $avail >/dev/null; then
                continue;
        fi
        used=$(expr $used + $size)
        echo $fn
done

脚本的输出可以传递给pax(1)以创建实际的存档。 例如(假设您已调用脚本fitfiles):

sh fitfiles 10000000 *.txt | pax -w -x ustar -v | xz > wdb.tar.xz