提取tarball时创建目标目录


25

是否可以创建一个类似于的目标目录,mkdir -p我可以在tar命令中定义一个不存在的目标目录,而tar会为我创建目录?

我知道我可以使用将输出重定向到目录tar -C /target/dir,但是如果目标目录不存在,这将不起作用。


4
如果不可能的话,您总是可以创建一个shell别名。
2011年

Answers:


38
mkdir -p /target/dir && tar -C /target/dir

3
无需汤匙喂食,直而尖。
阿玛多·马丁内斯

10
较小的建议更改:mkdir -p /target/dir && tar -C $_
Mark Melville

@MarkMelville向我们描述$ _应该在这里
Suhayb

@Suhayb $_是Bash中的一个特殊参数,它扩展为上一个命令的最后一个参数。
ConceptRat

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

从tar命令的手册页

--one-top-level[=DIR]

    将所有文件解压缩到DIR中,或者如果不带参数使用,则解压缩到以归档文件的基本名称命名的子目录中(减去可以识别的标准压缩后缀--auto-compress)。

-----测试

测试1

tar zxvf ../aaa.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree aaa
aaa/
├── 111
└── 222

//如果tgz名称与存档的root_dir相同,则没有其他效果

测试2

mv ../aaa.tgz ../bbb.tgz

tar zxvf ../bbb.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree bbb
bbb
└── aaa
    ├── 111
    └── 222

//如果tgz名称与存档的root_dir不同,则创建一个顶级目录


3
需要GNU焦油吗?Mac默认的bsd tar没有此选项。
Curtis Yallop

1
是的,应该更清楚地提及这一点。
kcrisman

5

这对我来说更有意义: mkdir -p /create/folder && tar -zxf haroopad-v0.13.0_x64.tar.gz -C /create/testfolder

mkdir制作文件夹,尽管我不太了解该-p开关。&&让您执行第二条命令。我使用了典型的tar开关,但最后-C使用它来更改目录并将其提取到所需的位置。

参考:将存档tar-gz中包含的文件解压缩到名为存档的新目录中


2
如果目录已经存在,则-p开关不会引发错误。
大卫

@David还将创建任何领先的不存在的目录,即/create如果不存在则将创建 。
安东尼奥·佩雷斯

1

如果您不知道要创建的路径...
从tar文件中获取所需的路径,然后创建它们...

for P in \`tar tvf tarfile.tar |tr -s [:space:] |cut -d' ' -f6\`; do  
    C=\`echo "${P: -1}"\`  #get the last character  
    if [ $C = '/' ]; then  
        echo "Found directory: $P"  
        mkdir -p $P  
    fi  
done
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.