我试图从整个 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文件
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)
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |