findのxdevオプション名の後に隠された歴史は何ですか?

findのxdevオプション名の後に隠された歴史は何ですか?

xdevオプションの名前は直感的ではないと思います。私にとって、これは「クロスデバイス(検索)」の略です。ただし、これは正反対に検索を単一のファイルシステムに制限します。代わりですが、やや古い名前は覚えやすい「マウント」です。このオプションの名前の後に隠された歴史は何ですか?

答え1

実際には、クロスデバイスを意味する可能性が高いです。するいいえ複数の端末で

内部に1985年のBSDの最初の実装、コードは次のとおりです

int    Xdev = 1;       /* true if SHOULD cross devices (file systems) */
[...]
   else if (EQ(a, "-xdev")) {
           Xdev = 0;

Xdevデバイスが交差する必要があるかどうかを追跡する内部変数はどこにありますか?述語は-xdevこれをゼロに設定します。

数年後、AT&TのDavid KornはSVR4に同様の述語を追加し、-mountエイリアスを与えました(FTW_MOUNT新しい木製ウォーキングライブラリの特徴を反映して)。

-mountこのオプションはあまり良いとは思わない。を表すと仮定シングルインストールこれはLinuxでも誤解を招くかもしれませんが、少なくともLinuxでは、ファイルシステムに対して複数のマウントポイントを設定できます。

$ mkdir -p a/b b
$ sudo mount --bind a b

今、b同じマウントポイントです。装備そして.a

$ find . -xdev
.
./b
./b/b
./a
./a/b
$ find . -mount
.
./b
./b/b
./a
./a/b

find複数の端末では動作しませんが、b異なります。ポイントだから-mount(シングルインストールとして)もっと誤解を招くことがあります-xdev防止クロスデバイス)。

答え2

あなたが信じるよりも複雑です。

AT&T実装では、findこの機能がnftw()導入SVr4され、マウントポイントで停止し、他の項目を含むファイルを報告しないnftw()フラグが付属しています。FTW_MOUNTst_dev

注文には と 1988 がSVr4 findすべてあり-mountました。-xdev-xdev-mount

一方、とはSunOSすでに1985年にあり、BSDその上に/が実装されていないので、他の意味を使用することができ、実際にそうしました。別のマウントポイントを印刷した後、onはもはや落ちません。-xdevSunOSBSD find*ftw()find -xdevSunOSst_dev

1992年、最初の規格には、前述のファイル形式(tarなど)POSIX以上が含まれていました。libcPOSIX標準の問題は、マウントポイントが報告されなければならず、マウントポイントが報告された後に停止されるのに対し、マウントポイントが報告される前に実装が停止されることです。find-xdev-xdevAT&T

GNU find は POSIX.1-1992 テキストに準拠した実装です。

したがって、最近のPOSIX標準会議で関連するバグレポートについて議論し、主要な標準と-mountFTW_XDEVnftw()

find -mountfindAT&T UNIX と同じように機能し、マウントポイントを報告しないでください。

find -xdevPOSIX規格に書かれているように実行し、マウントポイントを報告し、ツリーが削除されたときに停止する必要があります。

これには、実装を変更し、GNUが変更された動作を見つけるためにAT&TUNIXベースの実装が必要です。find-xdev-mount

注:私が知っている限り、sfind/libfindこれはすでに新しい規則に従う唯一の現在の実装です。

libfidndPOSIXの最終プロトコルが確立される前に必要なコードが実装されたので、マウントポイントで停止するのを覚えやすくするエイリアスとなった基本-mount+コードを実装しましたが、これをさらに報告しました。-xdev-mount+

関連情報