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

时间:2013-02-21 16:56:15

标签: linux tar

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

5 个答案:

答案 0 :(得分:21)

我认为你需要编写脚本。您可以使用tar -C选项指定提取所在的目录。

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

tar -xvzf archive.tar.gx -C archive_dir

e.g。

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

答案 1 :(得分:0)

创建一个您要在其中提取内容的文件夹,mkdir archive 并在提取时使用-C传递文件夹名称,  tar -xvf archive.zip -C archive

答案 2 :(得分:0)

tar -xvf bash.html_node.tar.gz --one-top-level

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

参考:https://unix.stackexchange.com/a/478341

答案 3 :(得分:0)

将文件从一个目录提取到第二个目录,同时将文件名保留在第二个目录中,即没有完整的文件路径和文件扩展名

%sh
for file in /mnt/dir1/*.tar.gz; 
do 
y=${file##*/}; 
z=${y%%.*}; 
mkdir -p /mnt/dir2/$z && tar -xzvf $file -C /mnt/dir2/$z;
done

答案 4 :(得分:-3)

好吧,如果你运行$ tar -zxf some-archive.tar.gz -C .,(注意末尾的点),将在你当前所在的目录中创建一个名为some-archive/的新目录。

也许这就是你的问题的意思?这是我一般想要的,所以它也适合你。