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