web-dev-qa-db-ja.com

arコマンドmovemember(例はありますか?)

アーカイブの作成または管理に使用される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
$

それで、それをどのように使用するのですか?

2
Columbia Rover

私の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.txtc.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と同等)で指定されたアーカイブ内のファイルの前に、アーカイブ内の新しいファイルを配置します。

3
Kusalananda