我下载了一个仅包含一个目录的 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,'
阅读全文这里。