【Linux】lhaコマンドでLHA形式(.lzh)アーカイブを展開する

目次

概要

かつて日本国内で広く普及していた圧縮形式「LHA(拡張子 .lzh)」のファイルを、Linux環境で展開(解凍)・管理するためのコマンドです。

現在ではレガシーな形式ですが、過去のデータ資産や古いソフトウェアのアーカイブを扱う際に必要となります。現代の環境では lhasa ではなく、標準的な lha コマンドを使用するのが一般的です。

※多くのディストリビューションで標準インストールされていないため、追加インストールが必要です(例: sudo apt install lhadnf install lha)。

仕様(引数・オプション)

構文

lha [コマンド] [オプション] [アーカイブファイル] [対象ファイル...]

主なコマンド(動作指定)

コマンド説明
lアーカイブ内のファイル一覧を表示します(展開はしません)。
xディレクトリ構造を保持したままファイルを展開します(推奨)。
eファイルを展開します(実装によってはディレクトリ構造を無視する場合があります)。
v詳細なファイル一覧を表示します。
tアーカイブの整合性をテストします(展開はしません)。

主なオプション(挙動変更)

オプション説明
f同名のファイルが存在する場合、確認せずに強制的に上書きします(Force)。
q処理メッセージを表示せずに実行します(Quiet)。
w=[DIR]指定したディレクトリを展開先とします。

基本の使い方

まずはアーカイブを展開せずに、中身のファイルリストを確認します。これにより、予期せぬ大量のファイルが含まれていないかチェックできます。

# アーカイブファイルの種類を確認(LHA形式であることを確認)
file old_data_v1.lzh

# 中身のリストを表示
lha l old_data_v1.lzh

実行結果例

old_data_v1.lzh: LHa 2.x archive data [lh5, v1, OS-9]
 PERMSSN    UID  GID      SIZE  RATIO     STAMP   NAME
---------- ----------- ------- ------ ------------ --------------------
-rw-r--r--  1000/1000     3412  45.2% Jan 21 10:00 readme.txt
-rw-r--r--  1000/1000    15820  21.5% Jan 21 10:00 src/main.c
---------- ----------- ------- ------ ------------ --------------------
 Total         2 files   19232  31.0%

実践コマンド

ディレクトリ構造を維持して展開する

アーカイブ内のフォルダ階層をそのまま保って展開します。通常はこの x コマンドを使用します。

# カレントディレクトリに構造を保って展開
lha x old_data_v1.lzh

展開先ディレクトリを指定する

カレントディレクトリを汚さないように、ディレクトリを指定して展開します(w オプションの使用法は実装バージョンにより異なる場合がありますが、ここではディレクトリ移動後の実行例を推奨します)。

# 作業用ディレクトリを作成し、その中で展開(最も確実な方法)
mkdir extracted_data
cd extracted_data
lha x ../old_data_v1.lzh

特定のファイルだけを取り出す

アーカイブ全体ではなく、必要なファイルだけを指定して展開します。

# readme.txt だけを取り出す
lha x old_data_v1.lzh readme.txt

カスタムポイント

  • 強制上書き展開 (f)バッチ処理などで、既存ファイルを問答無用で上書きしたい場合に f オプション(スイッチ)を付与します。Bash# 確認プロンプトを出さずに上書き展開 lha xf backup.lzh

注意点

  1. 文字コードの問題LHA形式はShift_JIS(Windows/DOS)でファイル名が保存されていることが多く、Linux(UTF-8環境)で展開するとファイル名が文字化けする場合があります。※最近の 7z コマンド(p7zip-full パッケージ)でも .lzh を扱える場合があり、そちらの方が文字コード変換に強いことがあります(7z x file.lzh)。
  2. セキュリティリスクLHAは古い形式であり、作成ツールによってはパスの検証が不十分なものがあります。信頼できないアーカイブを展開する際は、必ず事前に l コマンドで中身を確認し、絶対パス(/etc/… など)が含まれていないか注意してください。
  3. コマンドの入手性UbuntuなどのDebian系では non-free や universe リポジトリを有効にしないとインストールできない場合があります。見つからない場合は jlha-utils パッケージを探すか、7z の利用を検討してください。

応用

7zコマンドでLHAを展開する(モダンな代替案)

もし lha コマンドがインストールできない場合、多くのLinux環境で標準的な 7z コマンドでも代用可能です。

# p7zip-fullがインストールされている場合
7z x old_data_v1.lzh

まとめ

LHA形式は現在では作成されることは稀ですが、過去のデータを復元する際には避けて通れない形式です。

基本は lha l で確認し、lha x で展開するという、tarやzipと同様の作法で扱うことができます。ファイル名の文字化けが激しい場合は、7z コマンドでの展開も試してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次