通过变量自动保存 tar 中的目录名称

通过变量自动保存 tar 中的目录名称

我下载了一个仅包含一个目录的 tarball;这个目录的名字很长。

我希望在从 tarball 中提取该目录的名称后更改该目录的名称,但我更喜欢另一种方式而不是mkdir使用strip-components 1-C

我考虑过mv,但我更喜欢提前自动将目录名称保存在变量中;
我认为命令替换可能有助于保存输出形式为目录名称,但我看不出它如何只能选择 tarball 中的名称(或任何特定目录)。

命令替换怎么可能?如果不能,有什么替代方案?

答案1

我不确定我是否正确理解你的问题,但我认为你正在寻找这样的东西:

$ dir="$(tar tf archive.tar | cut -d / -f1 | uniq)"
$ echo "$dir"
tar-very-long-nime-very-very-long

答案2

以下假设您正在使用当前目录中的存档。

tar -x -f "$archivedir.tar"
mv "$archivedir" new-name

这假设变量包含不带后缀的存档$archivedir名称,并且这也是提取存档时将创建的目录的名称。tar.tar

它提取存档并重命名创建的目录。

tar如果您有存档的文件名$tararchive,并且文件名后缀为.tar(包含在 的值中$tararchive):

tar -x -f "$tararchive"
mv "$(basename "$tararchive" .tar)" new-name

"$(basename "$tararchive" .tar)"位可以替换为"${tararchive%.tar}"

答案3

使用 GNU tar,您可以使用类似 sed 的表达式来转换文件名:

tar -xf archive.tar.gz --xform='s,^very_long_name,short,'

阅读全文这里

相关内容