前回のxorrisoの簡単な使い方に続き、今回はxorrisoのマニュアルを参照しつつ、もう少し体系的にオプション類の指定方法を紹介しましょう。
メディアを指定するオプション
xorrisoでは-devオプションで操作するメディアを指定します。このオプションでは"-dev /dev/sr0"のように書き出したい光学ドライブを指定することも、"-dev discimage.iso"のように通常ファイルを指定して、ファイルシステム上にISOイメージを作成することも可能です。
"-dev"オプションに存在しないファイルを指定した場合は、その名前の新規ISOイメージを作成し、既存のISOイメージを指定した場合は、そのISOイメージを対象に処理を行うことになります。
複数の光学ドライブ間で内容をコピーしたり、ファイルシステム上に作成したISOイメージを光学ドライブに書き出す場合のように、読み込み元と書き出し先を区別したい場合は、読み込み用に-indev、書き出し用に-outdevを指定します。
たとえば、後述するような方法で作成したISOイメージをDVD-R等に書き出す際は、"-indev discimage.iso -outdev /dev/sr0"のような指定になります。また、"-indev"と"-outdev"の双方にファイル名を指定すれば、元のISOイメージは保持したまま、ファイルを追加、削除した新しいISOイメージを作ることもできます。
ISOイメージへファイルを追加するオプション
前回簡単に触れたように、xorrisoはファイルシステム上の任意の場所にあるファイルやディレクトリを、光学ドライブやISOイメージに書き出すことが可能です。
ISOイメージに書き出すファイルやディレクトリを指定するために、-addと-cpr、-mapの3種のオプションが用意されています。
以下、これらオプションをmanページの記述を参照しながら紹介してみます。
-addオプション
-addオプションに関するmanページの記述は以下の通りです。参考のために私訳を付けておきます。
指定されたファイルやディレクトリツリーをファイルシステムからISOイメージに書き出す。-pathspecsオプションに"on"か"as_mkisofs"を指定すると、ファイル名の展開機能は無効になる。合わせて'='(イコール)がファイルシステム上のパスとISOイメージ上のパスを結び付ける特別な文字になり、iso_rr_path=disk_pathの形式で指定できるようになる。
-addオプションは、mkisofsとの互換性のため設けられたオプションで、mkisofsが用いているのと同じ、"iso_rr_path=disk_path"の形式で、書き出すファイルやディレクトリを指定します。以下、実例を示しながら説明しましょう。
手元のNHKフォルダに「ラジオ英会話」を録音したファイルがあるとします。
これらのファイルをISOイメージ上の"ラジオ英会話"ディレクトリに書き出したい場合、-addオプションを使うとこのような指定になります。
"iso_rr_path=disk_path"の組み合わせは複数回指定でき、ファイルを直接指定することも可能です。たとえば、番組ファイルの3つをそれぞれepisode01から03という名前に変更して追加する場合、以下のような指定になります。
書き出したISOイメージの内容を確認するには、xorrisoの-findオプションを使うと、ループバックマウントする手間が省けて便利です。
-cprオプション
-cprはシェルから使える"cp -r"と同様の機能を持ったオプションです。このオプションのmanページの記述は以下の通りです。
ファイルシステム上にある指定したファイルやディレクトリツリーをISOイメージに書き出す。ISOイメージ上のファイル名生成ルールはシェルコマンドのcp -rと同様だが、必要に応じてiso_rr_pathのディレクトリは作成される。特に、複数のdisk_pathの書き出し先として指定された存在しないiso_rr_pathはディレクトリとして生成され、既存のディレクトリに書き出す場合と同様、指定された(複数の)disk_pathはそのディレクトリ以下にサブツリー構造を保持する。disk_pathが単独のファイルやディレクトリの場合、生成されるiso_rr_pathは指定されたdisk_pathと同じ種類になる。
-cprオプションを使えば、シェルから実行する"cp -r"コマンド同様、disk_pathに指定した複数のファイルやサブディレクトリを含むディレクトリを、ISOイメージのiso_rr_pathに指定したディレクトリに書き出すことができます。
このオプションを使えば、NHKディレクトリ以下にまとめて保存している番組ファイルを、パターンマッチを使ってISOイメージ上では月ごとに分けて書き出す、という処理も可能です。この場合、-disk_pattern onオプションを合わせて指定し、ファイルシステム上のファイル名展開機能を有効にします。
-mapオプション
"-add"オプションのiso_rr_path=disk_pathと同様の機能を実現するためのオプションが-mapです。このオプションのmanページの記述も参照しましょう。
disk_pathで指定したファイルオブジェクトを、ISOイメージ上のiso_rr_pathとして書き出す。もしdisk_pathがディレクトリだった場合、そのディレクトリ以下にある全てのファイルやサブディレクトリがISOイメージに書き出される。
-addオプションの場合は"iso_rr_path=disk_path"という形式だったのに対し、-mapオプションでは"disk_path iso_rr_path"と、順番が逆になるのが注意点でしょうか。
たいてい"-map"で間に合うので使う機会は少ないものの、単独のファイルやディレクトリのみを書き出すための-map_sigleというオプションもあります。このオプションもmanページを引いておきましょう。
-map と似た動作だが、disk_path がディレクトリだった場合、そのディレクトリ以下は書き出さない。
先に紹介したファイル名を変更して書き出す例は、"-map"オプションを使うとこのようになります。
"-map"オプションの場合、ファイルシステム上のファイルやディレクトリとISOイメージ上のファイルやディレクトリは一対一になるので、複数のファイルを名前を替えつつ書きこむ、といった処理は面倒です。そのため、"-map"に反復機能を持たせた-map_lというオプションもあります。
-mapをdisk_pathで指定したそれぞれの対象に実行する。iso_rr_pathはdisk_pathのうちdisk_prefixの部分をiso_rr_prefixに変更する形で生成される。
このオプションを使って、ラジオ英会話の4月分の番組をそれぞれepisode_XXという名前に変更して書き出すにはこういう指定になります。
この例では、disk_path(ファイルシステム上のパス)のうち "NHK/ラジオ英会話_2017_04_0" の部分を"episode_"に置き換えた形でiso_rr_path(ISOイメージ上のパス)を生成しています。"-disk_pattern on"は"*"(ワイルドカード)のパターンマッチを可能にする指定、最後の"--"は可変長引数の終りの指定です。
-map_lオプションを使うと、NHKディレクトリにある各ファイルを、名前を変更した上で月ごとのディレクトリにまとめて整理する、という指定も可能です。
ISOイメージ内のファイルを操作するオプション
xorrisoでは、前節に紹介したような方法で作ったISOイメージ内のファイルやディレクトリを、通常のファイルやディレクトリと同じように操作するためのオプションも用意されています。
ファイルやディレクトリを削除する-rm、-rm_r、-rmdir、移動させる-move、-mv、UIDを変更する-chown、-chown_r、GIDを変更する-chgrp、-chgrp_r、ファイルのパーミッションを変更する-chmod、-chmod_rなどがそれで、末尾に"_r"が付いているオプションは、指定したディレクトリ以下に再帰的に適用されることを意味します。
ここに示したオプションは、シェルから使うコマンドとほぼ同じ機能になっているので、使用方法は類推できるでしょう。なお、-moveと-mvは、"-mv file dir"した場合、fileはdirの下に移動する(mvコマンドと同じ動作)のに対し、"-move file dir"の場合、fileがdirを置き換える、という違いがあるそうです。
注意しなければいけないのは、これらのオプションを使ってISOイメージを編集する際、編集したいISOイメージを"-dev"で指定すると、加えた修正はそのISOイメージに新しいセッションとして記録される、という点です。そのため、-rm_r等でISOイメージ内のファイルを削除しても、ISOイメージのサイズは減少しません。
ネット経由でISOイメージを配布する際のように、不要なファイルを除いたISOイメージが必要な場合、複数のセッションをマージしたISOイメージを作り直す必要があります。
その際は-indevに古いISOイメージ、-outdevに新たに作成したいISOイメージのファイル名を指定します。ただし、"-indev"と"-outdev"を指定する場合、"-indev"の内容に何らかの変更が加わらないと、"-outdev"にデータは書き出されません。
この問題を回避するためには、"-alter_date a +0 / -- "という処理を追加して、ルートディレクトリのアクセス時刻を形式的に変更する(0秒を加えるだけなので実際は変わらない)、という方法があります。
この処理は作成済みのISOイメージを光学メディアに書き出す際にも必要で、筆者がxorrisoを使い始めたころにはずいぶん首を捻った点です。xorrisoをこれから使おうという方はぜひご注意ください。
一方、"-dev"でISOイメージを指定するのではなく古いISOイメージを"-indev"に、新しいISOイメージのファイル名を"-outdev"に指定して編集作業を実行すれば、修正結果は新しいISOイメージに直接反映されます。あれこれ試行錯誤する必要がない編集作業の場合、こちらの方法が簡単かも知れません。
今回、その一端を紹介できたかと思いますが、xorrisoはISOイメージの作成と書き出しだけでなく、ISOイメージを操作するためにシェルやfileutils的な機能まで取り込んだ多機能ツールになっています。
本連載が紹介するのはそのうちのごく一部の機能だけなので、興味をもたれた方は、ぜひマニュアルやドキュメントを繙(ひもと)いて、xorrisoの広大な世界を探検してみてください。