.tar.xzファイルを抽出する方法は?

.tar.xzファイルを抽出する方法は?

一部のソフトウェアは新しいアーカイブ形式で配布されているようです。

$ file node-v18.7.0-linux-x64.tar.xz
node-v18.7.0-linux-x64.tar.xz: XZ compressed data

可能であれば、tar(gzipまたはbzip2を使用できるように)を使用してどのように解凍できますか?

答え1

いくつかのtar実装(少なくともGNUtarstarlibarchive bsdtar)はすでにこの圧縮形式を処理しているので、次のことができます。

  • 形式を明示的に指定しないで、tarが自動的に圧縮を検出するようにします(gtar²、bsdtar、またはstar³を使用)。

    tar -xf node-v18.7.0-linux-x64.tar.xz
    

    または、進行状況を確認するには、次の手順を実行します。

    tar -xvf node-v18.7.0-linux-x64.tar.xz
    
  • -J--xzGNUまたはlibarchiveで/を使用するか、XZを期待するように指示するには、-xzwithを使用します。startar

    tar -xJf node-v18.7.0-linux-x64.tar.xz
    
    gtar -xJf node-v18.7.0-linux-x64.tar.xz
    
    bsdtar -xJf node-v18.7.0-linux-x64.tar.xz
    
    star -x -xz -f node-v18.7.0-linux-x64.tar.xz
    

これらの特定の実装がない場合、またはtar標準paxコマンド(tar実装間の非互換性が多すぎてUNIX標準から削除されている)を使用している場合は、⁴を使用してアーカイブを解凍し、xzアーカイブをパイプします。

xz -dc node-v18.7.0-linux-x64.tar.xz | tar -xvf -
xz -dc node-v18.7.0-linux-x64.tar.xz | pax -rv

1通常、tarGNUシステムで呼び出されますが、そのシステムの隣にインストールされている場合は、gtar他のシステムで頻繁に呼び出されますgnutargnu-tar

-²GNU tarの場合、ファイルがstdinからファイル名に渡されるか、ファイルを検索できない場合(この場合は渡す必要があります)、このオプションは効果がありません-J

³アスタリスクの場合、ファイルが見つからないと効果はありません。この場合、実際にこの-xzオプションを使用する必要があります。tar -xf -stdinを検索できる限り、まだ有効です。

xz⁴この場合、エラーが常に検出されない可能性があることに注意してください。ほとんどのBourne様シェルは、pipefailここで役に立つksh93のオプションをサポートしていますset -o pipefail

関連情報