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_MOUNT
st_dev
注文には と 1988 がSVr4
find
すべてあり-mount
ました。-xdev
-xdev
-mount
一方、とはSunOS
すでに1985年にあり、BSD
その上に/が実装されていないので、他の意味を使用することができ、実際にそうしました。別のマウントポイントを印刷した後、onはもはや落ちません。-xdev
SunOS
BSD
find
*ftw()
find -xdev
SunOS
st_dev
1992年、最初の規格には、前述のファイル形式(tarなど)POSIX
以上が含まれていました。libc
POSIX標準の問題は、マウントポイントが報告されなければならず、マウントポイントが報告された後に停止されるのに対し、マウントポイントが報告される前に実装が停止されることです。find
-xdev
-xdev
AT&T
GNU find は POSIX.1-1992 テキストに準拠した実装です。
したがって、最近のPOSIX標準会議で関連するバグレポートについて議論し、主要な標準と-mount
。FTW_XDEV
nftw()
find -mount
find
AT&T UNIX と同じように機能し、マウントポイントを報告しないでください。
find -xdev
POSIX規格に書かれているように実行し、マウントポイントを報告し、ツリーが削除されたときに停止する必要があります。
これには、実装を変更し、GNUが変更された動作を見つけるためにAT&T
UNIXベースの実装が必要です。find
-xdev
-mount
注:私が知っている限り、sfind/libfind
これはすでに新しい規則に従う唯一の現在の実装です。
libfidnd
POSIXの最終プロトコルが確立される前に必要なコードが実装されたので、マウントポイントで停止するのを覚えやすくするエイリアスとなった基本-mount+
コードを実装しましたが、これをさらに報告しました。-xdev
-mount+