将目录树压缩成多个tar档案到单个xz中

时间:2017-05-12 15:11:54

标签: bash unix compression tar xz

我正在尝试压缩包含许多rootdir文件夹树的大subdir_i

./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/

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

1 个答案:

答案 0 :(得分:1)

每次在循环中运行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