アーカイブの作成または管理に使用されるLinux/UNIXの「ar」コマンドについて話します。
マニュアルによると、「m」修飾子を使用してアーカイブ内のメンバーを移動できます。しかし、例はありません。
マニュアルページには、「mで修飾子が使用されていない場合、メンバー引数で指定したメンバーはアーカイブの最後に移動されます;」と書かれているので、次のように機能するはずです(そして私は成功しました)。
$ ar -t out.a
a.txt
b.txt
c.txt
d.txt
$ ar m out.a a.txt
$ ar -t out.a
b.txt
c.txt
d.txt
a.txt
$
ファイル「a.txt」は正常に最後に移動されました。
しかし、「a、b、またはi修飾子を使用して、代わりに指定された場所に移動できる」ということになると、問題が発生しました。
$ ar t out.a
a.txt
b.txt
c.txt
d.txt
$ ar ma out.a a.txt
ar: a.txt: File format not recognized
$
「a」は前に移動することを意味し、「b」は後ろに移動することを意味し、「i」はインデックスに移動することを意味すると思いました。だから私は試しました:
$ ar t out.a
a.txt
b.txt
c.txt
d.txt
$ ar ma 1 out.a a.txt
$ ar t out.a
b.txt
c.txt
d.txt
a.txt
$
「a.txt」はまだ最後に移動しています!
そして、ファイルを後方に移動したいとき、それはまだ最後に移動されました:
$ ar t out.a
a.txt
b.txt
c.txt
d.txt
$ ar mb 1 out.a c.txt
$ ar t out.a
a.txt
b.txt
d.txt
c.txt
$
それで、それをどのように使用するのですか?
私のOpenBSDシステムのGNU ar
ドキュメントa
修飾子の説明:
a Add new files after an existing member of the archive. If you use
the modifier a, the name of an existing archive member must be
present as the relpos argument, before the archive specification.
つまり、アーカイブメンバーのnameを指定して、エントリをb
の後(または前)に移動する必要があります。 ar
のPOSIX仕様は、posname
(GNU)ではrelpos
と呼ばれます)の説明で詳しく説明しています。ドキュメンテーション):
posname
相対的な配置に使用される、アーカイブ内のファイルの名前。オプション
-m
および-r
を参照してください。
これをテストする(-
で標準オプションを使用):
$ ar -t out.a
a.txt
b.txt
c.txt
d.txt
a.txt
をc.txt
の後に移動します。
$ ar -m -a c.txt out.a a.txt
$ ar -t out.a
b.txt
c.txt
a.txt
d.txt
i
修飾子は、b
のエイリアスです。
POSIXはこれについても言及しています:
-i
posname
オペランド(-b
と同等)で指定されたアーカイブ内のファイルの前に、アーカイブ内の新しいファイルを配置します。