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.targzipで圧縮されたtarアーカイブ。rootfs.tar.gzgzipで2回圧縮されたtarアーカイブ。 Tarは二重圧縮のために混乱し、エラーを報告せずにファイルを空のアーカイブとして扱います。

2回圧縮することは意味がありませんので、この追加のgzipステップを削除してください。混乱を避けるために渡すパスが 。で始まるので、解凍rootfs.tar.gz時に . で始まるパスを渡す必要があります。 tarはパスの操作を無作為に処理しません。rootfs.tartar.././

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

関連情報