我有一个压缩的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
。
答案 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
根据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