tar xf 命令给出未找到文件

tar xf 命令给出未找到文件

我试图从整个 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

能否请您提供原因,上面的tar.gz中有version.txt文件

答案1

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

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

tar zcvf rootfs.tar.gz --transform='s!^\./!!' -C test .
tar xf rootfs.tar.gz version.txt

相关内容