如何单命令提取tar包指定文件且不保留父目录结构?
实现仅提取单个文件且不保留目录结构
当然有单命令可以实现这个需求,完全不需要全量解压归档文件。这里有两种常用的方法,都能直接拿到你想要的file.txt:
方法一:使用--strip-components参数(推荐)
这个参数可以帮你去掉归档文件中路径的前N层目录,刚好匹配你的需求:
tar -xzf foo.tar.gz --strip-components=2 folder_1/folder_2/file.txt
参数解释:
-x:切换到解压模式-z:告诉tar处理gzip压缩的归档(因为你的文件是.tar.gz格式)-f:指定要操作的归档文件名--strip-components=2:关键参数,意思是移除路径的前2层目录(也就是folder_1/和folder_2/)- 最后的
folder_1/folder_2/file.txt是归档文件中目标文件的完整路径
如果想把提取的文件放到指定目录(比如./my_files),可以加上-C参数(注意目标目录需要提前创建):
tar -xzf foo.tar.gz --strip-components=2 -C ./my_files folder_1/folder_2/file.txt
方法二:使用-O参数重定向输出
这个方法会把文件内容直接输出到标准输出,然后你可以重定向到目标文件:
tar -xzf foo.tar.gz -O folder_1/folder_2/file.txt > file.txt
-O:表示将提取的文件内容输出到标准输出,而不是直接创建文件- 最后通过
>将标准输出的内容写入到当前目录的file.txt中
这两种方法都能快速拿到单独的file.txt,不会生成多余的目录层级,选哪种都可以~
内容的提问来源于stack exchange,提问作者jlnkls
相关产品推荐
相关产品推荐

