私はRHEL7を実行しているマシンとCentOS-7.5を実行しているマシンの2つを持っています。
find --version
レポートごとのバージョン4.5.11。
各ディレクトリに次のディレクトリ構造を作成しました。
./dir/some-file
./.hidden/dir/some-file
RHEL7システムでこれを実行すると、上記とfind -name some-file
一致する出力が得られます。
ただし、CentOS-7.5 システムで find を実行すると、結果のリストが逆の順序で表示されます。
なぜこれですか?
答え1
検索パスのディレクトリ構造を検索する順序はfind
次のとおりです。ライブラリreaddir()
機能ディレクトリエントリを返します。これらのエントリはもはや順序付けされていないため、find
ファイルシステムの実装によっては、ディレクトリエントリがファイルシステムで作成される順序、または同じパーティション内の他のファイルとディレクトリが作成および削除される順序によって異なります。 。
の出力でも同じ順序が得られますls -f
。
答え2
マニュアルページによるとディレクトリを読む()
readdir() の連続呼び出しでファイル名を読み取る順序は、ファイルシステムの実装に依存し、何らかの方法で名前がソートされる可能性はありません。
これは、実際に応答を受け取る順序がファイルシステムによって異なり、どの順序も期待できないことを意味します。エントリがディレクトリ構造に格納される順序がわかりますが、ディスクの配置方法のため、順序は1つのシステムから次のシステムまで同じではありません。