単一ファイルのアーカイブ解除がハングする

単一ファイルのアーカイブ解除がハングする

非常に大きなディレクトリを解凍しようとしています。全体を解凍するには、次の操作を実行します。

$ sudo tar -xjf itunes20140618.tbz --verbose
x itunes20140618/
x itunes20140618/genre_artist
x itunes20140618/imix_type
...etc...

ただし、1 つのファイルのみをアーカイブ解除しようとすると、正しく実行されますが、コマンドは無期限にハングします。さらに、--verbose ステートメントを使用すると、出力がまったく印刷されません。次に例を示します。

$ sudo tar -xjf itunes20140618.tbz itunes20140618/imix --verbose
[ nothing prints...it just hangs. But it does un-tar that single file ]

答え1

オプション以外の引数の後にオプションを指定しないでください。特に、tarwhich は非標準のコマンドであり、オプション、アクション、およびそれらに対する引数を解析するための古い方法と新しい方法がいくつかサポートされている複数の実装があります。

で:

tar -xjf itunes20140618.tbz itunes20140618/imix --verbose

itunes20140618.tbzはオプションの引数であり-fitunes20140618/imixアーカイブから抽出するメンバーの名前として取られる追加の非オプション引数です。--verboseが追加の引数 (抽出する別のメンバーの名前) として扱われるか、オプションとして扱われるかは、の実装とバージョンtar、さらにはコンパイル方法や実行環境によって異なります。

あなたの場合、おそらくあなたはそれをグローバルな選択肢としてtar捉えていない人(大多数)の一人である可能性があります。--verbose

ここでは、次を使用します。

tar -xjf itunes20140618.tbz --verbose itunes20140618/imix

あるいはもっとポータブルなもの:

bunzip2 < itunes20140618.tbz | tar xvf - itunes20140618/imix

または、tar標準に置き換えます(ただし、移植性は低くなります)pax

bunzip2 < itunes20140618.tbz | pax -vr itunes20140618/imix

答え2

使用中のbzip2ものはファイルアーカイバしたがって、tar本質的には として機能し file archiverbzip2それらを圧縮します。

たとえば、tar を使用してファイルのコレクションをアーカイブし、その結果得られたアーカイブ ファイルを gzip で圧縮すると、拡張子が .tar.gz のファイルが作成されます。

しかし、このアプローチには、Wiki の記事に記載されている欠点があります。

1 つのファイルを抽出または変更するのは困難です。 1 つのファイルを抽出するには、アーカイブ全体を解凍する必要があり、時間とスペースを消費する可能性があります。

したがって、単一のファイルを頻繁に抽出する場合は.tar、 または.zipのみを使用することをお勧めします。.rar

関連情報