将archive.tar.gz中包含的文件解压缩到名为archive的新目录

si_*_*012 25 linux tar

我有一个包含大约800个.tgz档案的目录,每个档案包含大约10个文件.实际上,我想将每个存档转换为同名的目录.是否有一个简单的一行命令来执行此操作,还是应该编写脚本?

sus*_*tus 27

我想你需要编写这个脚本.您可以使用tar -C选项指定提取所在的目录.

下面的脚本假定目录不存在,必须创建.如果目录确实存在,脚本仍然可以工作 - mkdir将失败.

tar -xvzf archive.tar.gx -C archive_dir
Run Code Online (Sandbox Code Playgroud)

例如

for a in *.tar.gz
do
    a_dir=`expr $a : '\(.*\).tar.gz'`
    mkdir $a_dir 2>/dev/null
    tar -xvzf $a -C $a_dir
done
Run Code Online (Sandbox Code Playgroud)


yat*_*sek 11

如果GNU tar考虑到足够现代,那么这应该是这里的最佳答案:https : //unix.stackexchange.com/a/478341/34069

为简洁起见,这是摘录:

tar -xvf bash.html_node.tar.gz --one-top-level
Run Code Online (Sandbox Code Playgroud)

它将存档提取到以存档文件名命名的新目录中。

  • 选项 --one-top-level 已添加到 GNU tar 版本 1.28(2014-07-28 发布)中,请参阅此处的发行说明:https://www.gnu.org/software/tar/ (3认同)
  • @IanSmith - 好吧,好点 - 但你的意思可能是“它在 BSD 版本中不存在......” (2认同)