大きな tar.gz アーカイブから 1 つのフォルダーを抽出するにはどうすればよいですか?

大きな tar.gz アーカイブから 1 つのフォルダーを抽出するにはどうすればよいですか?

私はこのコマンドを5GBアーカイブ

tar -zxvf archive.tar.gz /folder/in/archive

これは正しいやり方でしょうか? コマンドライン出力がなく、永遠に時間がかかるようです...

答え1

tar相対パスを保存するデフォルトでGNU tar では、絶対パスを保存しようとすると次のように表示されます。

tar -cf foo.tar /home/foo
tar: Removing leading `/' from member names

特定のフォルダーを抽出する必要がある場合は、tar ファイルの内容を確認してください。

tar -tvf foo.tar

foo.tar正確なファイル名をメモしてください。私のファイルの場合、/home/foo/bar次のようにして抽出できます。

tar -xvf foo.tar home/foo/bar # Note: no leading slash

つまり、あなたが投稿した方法は (必ずしも) 正しい方法ではありません。先頭のスラッシュを省略する必要があります。絶対パスをシミュレートしたい場合は、cd /まずスーパーユーザーであることを確認してください。また、次の方法でも同じことができます:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option

パスを相対パスに変換するのには、非常に明白で正当な理由がありますtar。 1 つは、アーカイブを元のソース以外の場所に復元できることです。 もう 1 つは、セキュリティです。 アーカイブを抽出し、そのファイルが現在の作業ディレクトリに表示されることを期待して、誤って他の場所にあるシステム ファイル (または自分の作業) を上書きする可能性があります。

注:-Pオプションを使用する場合、tar 意思アーカイブの絶対パス。したがって、抽出する前に大きなアーカイブの内容を必ず確認するようにしてください。

関連情報