将目录树压缩到多个 tar 存档中,放入单个 xz 中



我正在尝试压缩一个包含许多文件夹树subdir_i的大型rootdir如下所示:

./rootdir
./rootdir/subdir_1
./rootdir/subdir_2
...

我希望将其输出到单个压缩存档中,但每个子目录都位于其自己的 tar 存档中:

rootdir.tar.xz  # containing:
subdir_1.tar
subdir_2.tar

我尝试了以下方法:

for foo in `find rootdir -maxdepth 1 -name "subdir_*" -type d`
do
tar --create --verbose --file=- --directory="rootdir" `basename ${foo}` 
# in shorter form:  tar -cvf - -C rootdir subdir_i
done | xz -zc9 > rootdir.tar.xz 

这确实将子目录隔离到 xz 中,但只有一个 tar 存档,只有最后一个目录:

rootdir.tar.xz
rootdir.tar # containing subdir_2/

但是,该存档的大小与整个根目录树的压缩一致。任何想法为什么会这样以及如何让它做我想做的事(不使用中间档案)?

每次你在循环中运行tar时,你都会创建一个新的归档文件——这就是为什么最终输出只是最后一个目录。

我不相信有任何方法可以在没有中间文件的情况下做你想做的事情。您可以执行以下操作来最大程度地减少所需的空间:

rm rootdir.tar
find rootdir/* -maxdepth 0 -type d | while read foo
do
b=$(basename "$foo")
tar --create --file "$b".tar --directory rootdir "$b"
tar --append --file rootdir.tar "$b".tar
rm "$b".tar
done
xc -zc9 rootdir.tar

最新更新