这是我的文件结构。我当前位于test2/
目录中,所有命令都必须从那里运行。
test/
|_test2/
publish/
|_subfolder1/
|_f1
|_f2
|_f3
|_subfolder2/
|_f4
|_f5
|_f6
|_f7
我需要执行以下操作
- 创建子文件夹2的tar.gz(名称相同)
- 删除子文件夹2
- 创建子文件夹1(名称相同)的tar.gz,包括子文件夹2.tar.gz
- 删除子文件夹1
最后 tar 结构应该是这样的
publish/
|_subfolder1.tar.gz
|_subfolder2.tar.gz
当我解压当前路径中的每个 tar.gz 时,输出应如下所示:
publish/
|_subfolder1.tar.gz
|_subfolder1/
|_f1
|_f2
|_f3
|_subfolder2.tar.gz
|_subfolder2/
|_f4
|_f5
|_f6
|_f7
我可以通过执行以下操作来实现此目的:
cd ../../publish/subfolder1
tar -zxf subfolder2.tar.gz subfolder2/
rm -rf subfolder2
cd ../
tar -zxf subfolder1.tar.gz subfolder1/
rm -rf subfolder1
cd ../test/test2
我真的不希望我的脚本在带有cd
.我尝试使用以下命令代替:
tar -zcf ../../publish/subfolder1/subfolder2.tar.gz -C ../../publish/subfolder1/subfolder2/ .
rm -rf ../../publish/subfolder1/subfolder2/
tar -zcf ../../publish/subfolder1.tar.gz -C ../../publish/subfolder1/ .
rm -rf ../../publish/subfolder1/
这将创建 tarball,但会删除目录。解开它们后,我看到以下内容:
publish/
|_subfolder1.tar.gz
|_subfolder2.tar.gz
|_f1
|_f2
|_f3
|_f4
|_f5
|_f6
|_f7
如何在不使用一堆 cd 命令的情况下将文件夹路径保留在 tarball 结构中?
答案1
要存档内容,foo
更改为foo
当前tar
目录:-C /some/dir/foo .
。要存档foo
目录本身,请更改为foo
的父目录和tar
foo
: -C /some/dir foo
。
所以命令看起来像:
tar -zcf ../../publish/subfolder1/subfolder2.tar.gz -C ../../publish/subfolder1 subfolder2
rm -rf ../../publish/subfolder1/subfolder2/
tar -zcf ../../publish/subfolder1.tar.gz -C ../../publish subfolder1
rm -rf ../../publish/subfolder1/