~/Downloads/t1$ tar tf test.t
home/a/Downloads/t2/
home/a/Downloads/t2/z.txt
home/a/Downloads/t2/y.txt
~/Downloads/t1$ tar xf test.t
~/Downloads/t1$ ls ~/Downloads/t2
ls: cannot access ’/home/a/Downloads/t2’: No such file or directory
なぜこれが起こるのですか?パス名を入力していないのですか?
答え1
ls home/a/Downloads/t2/
tarアーカイブを抽出したディレクトリで試してください。
tar t
リストのパスを参照してください。いいえ前にスラッシュがあるため、アーカイブを抽出するときは、ファイルシステムのルートではなく現在の作業ディレクトリに基づいています。一般的に、アーカイブから可能な場所にファイルを抽出するのは非常に危険です。
もちろん、アーカイブを作成するときにパスの関連部分だけを保存するのではなく、tar cf foo.tar t2
アーカイブを使用することがよくあります。tar cf foo.tar /home/a/t2
ただし、アーカイブにはすでに長いパスがあるため、a)ルートディレクトリに移動して解凍できます。
~$ cd /
/$ tar xf ~/Downloads/t1/test.t
tar
または、少なくともGNU tarのように不要な部分を削除するオプションを使用してください。
--strip-components=NUMBER
抽出するときは、ファイル名からNUMBER個の前のコンポーネントを削除してください。
だからtar xf test.t --strip-components=3
それを行う必要があります。