web-dev-qa-db-ja.com

大きなtar.gzアーカイブから単一のフォルダーをどのように抽出しますか?

5GBアーカイブでこのコマンドを使用しています

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

これはこれを行う正しい方法ですか?コマンドライン出力がないため、それは永遠にかかっているようです...

145
Garrett Hall

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オプション、tarwillアーカイブの絶対パス。そのため、抽出する前に大きなアーカイブの内容を確認することは常に価値があります。

160
Alexios