从不同的目录创建 tar.gz 文件,tar 必须将文件保留在特定的目录结构中

从不同的目录创建 tar.gz 文件,tar 必须将文件保留在特定的目录结构中

这是我的文件结构。我当前位于test2/目录中,所有命令都必须从那里运行。

test/
  |_test2/
publish/
  |_subfolder1/
      |_f1
      |_f2
      |_f3
      |_subfolder2/
          |_f4
          |_f5
          |_f6
          |_f7

我需要执行以下操作

  1. 创建子文件夹2的tar.gz(名称相同)
  2. 删除子文件夹2
  3. 创建子文件夹1(名称相同)的tar.gz,包括子文件夹2.tar.gz
  4. 删除子文件夹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/

相关内容