如何在不创建子目录的情况下从tar存档中提取文件?

时间:2016-12-14 09:43:19

标签: linux bash tar

我有一个压缩的tar存档,我想从存档的深层提取一个文件到当前的工作目录。

是否有比tar更好的东西,或者在没有目录组件的情况下提取它的方法?

我现在正在做这样的事情:

tar xfvz $file -C $destination $folder"/"$file
cd $destination"/"$folder
mv $file ../$file 
rm -r $folder

但我有时会删除错误的$folder

例如,我的存档是:mytar.tar.gz。 在里面我有myfolder/mysecondfolder/hello.txt

我想在当前目录中将myfolder/mysecondfolder/hello.txt提取为hello.txt

2 个答案:

答案 0 :(得分:4)

如果GNU tar可用,您可以使用--strip-components参数:

#!/bin/bash
file_to_extract=myfolder/mysecondfolder/hello.txt
depth=$(awk -F/ '{print NF-1}' <<< "$file_to_extract")
tar zxvf mytar.tar.gz --strip-components="$depth" "$file_to_extract"

来自man tar:

--strip-components=NUMBER
      strip NUMBER leading components from file names on extraction

来源:https://www.linuxquestions.org/questions/linux-newbie-8/extracting-tar-gz-files-in-current-directory-689243/#postmenu_3368879

根据Toby Speight的建议,更短的解决方案是使用--transform选项:

tar zxvf mytar.tar.gz --transform='s,.*/,,' myfolder/mysecondfolder/hello.txt

答案 1 :(得分:-3)

只需在tarball名称后面提供文件的完整存储路径。

示例:假设您想要test.tar.gz的文件2.pdf

tar -zxvf test.tar.gz 2.pdf