tar xf 命令找不到文件

md.*_*mal 2 tar gzip

我试图从整个 tar.gz 中提取一个文件,但它不起作用。以下是我试图模拟问题的命令

mkdir test
touch test/version.txt
echo "1.0.2" > test/version.txt 
tar zcvf rootfs.tar -C test .
gzip  -f -9 -n -c rootfs.tar > rootfs.tar.gz
tar xf rootfs.tar.gz version.txt

tar: version.txt: Not found in archive
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)

你能提供原因吗,上面的tar.gz中有version.txt文件

Gil*_*il' 7

rootfs.tar是一个用 gzip 压缩的 tar 档案。rootfs.tar.gz是一个用 gzip 两次压缩的 tar 档案。tar 似乎被双重压缩搞糊涂了,把文件当作空存档而不是报错。

压缩两次是没有意义的,所以删除这个额外的 gzip 步骤。为避免混淆,请调用压缩存档rootfs.tar.gz而不是rootfs.tar. 并且由于您要传递的路径以 开头,因此在提取时需要传递以tar开头.的路径./: tar 不会将./路径视为无操作。

mkdir test
touch test/version.txt
echo "1.0.2" > test/version.txt 
tar zcvf rootfs.tar.gz -C test .
tar xf rootfs.tar.gz ./version.txt
Run Code Online (Sandbox Code Playgroud)

如果要避免./文件名中的前缀,可以--transform在创建存档时使用。

tar zcvf rootfs.tar.gz --transform='s!^\./!!' -C test .
tar xf rootfs.tar.gz version.txt
Run Code Online (Sandbox Code Playgroud)