如何将压缩目录提取到特定文件名?

时间:2013-12-27 01:14:24

标签: bash tar

我有一个压缩文件file.tar.bz2,我想提取它,问题是压缩的文件是一个名称未知的目录。由于我想在脚本中使用它,我想指定结果目录的名称,以便它不再是未知的。

如何指定解压缩目录的名称?

我尝试重定向到stdout

tar -xf file.tar.bz2 -O > file

但这不起作用,因为结果是可执行文件:

file file
file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, BuildID[sha1]=fe7990e83d40c3e28bd1cacd345468bfa9be3d85, stripped

1 个答案:

答案 0 :(得分:2)

我可以重申一下你的问题:

  • 您有一个压缩的存档,其中包含一个目录。
  • 您不知道该目录的名称。
  • 您想查找该目录的名称。

我可以建议tar -tf file.tar.bz2 > file-t参数代表 tell 。这将告诉您存档的内容。 file文件将包含该压缩tarball的目录。

从那里,您可以解析file文件以查找目录的名称。事实上,我刚试过这个:

directory_name=$(tar tf test.tar.bz | sed 's#/.*##'  | sort -u)

如果tarball只包含一个目录,则shell变量$directory_name将设置为该目录名。如果有多个目录,则$directory_name将它们包含在NL分隔列表中。