我正在尝试压缩一个包含许多文件夹树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