我有一个目录,其中包含多个不同大小的文件
a.txt
b.txt
c.txt
我想限制创建多个具有最大固定大小(例如100 MB)的tar文件。这样整个文件都包含在tar中或者不包含在tar中(如果文件大小大于固定大小可能会抛出错误)
我知道分裂功能:
上述方法的问题是无法单独提取生成的tar文件。
任何人都可以帮助解决方案(或提供替代解决方案)
答案 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