1

約100万個のファイルを含むボリュームの組み合わせで、次のコマンドを実行しました。

$ sudo find "$FULFILLMENT" "$ARCH1" "$ARCH2" "$MASTERING"
Tue Jan 29 15:04:05 PST 2013
Tue Jan 29 15:22:46 PST 2013
18m41s


$ sudo find "$FULFILLMENT" "$ARCH1" "$ARCH2" "$MASTERING" -type f
Tue Jan 29 15:24:06 PST 2013
Tue Jan 29 15:49:10 PST 2013
25m4s

-type f通常のfindコマンドよりも使用に時間がかかるのはなぜですか?すべてのファイルを反復処理する必要がなかったので(おそらく20%少ないファイル)、より高速になると思います。時間の増加の原因は何ですか?

4

2 に答える 2

4

-type fパラメータfindがないと、各statファイルではなく、readdirシステム コールを使用してディレクトリ エントリを取得し、システム コール、コンテキスト スイッチ、inode ルックアップなどの数を減らします。

findこの特定のケースでは、クエリ オプティマイザーを使用できます。-O2のマニュアルページでオプションを調べてくださいfind。クエリは次のようになります。

$ sudo find -O2 "$FULFILLMENT" "$ARCH1" "$ARCH2" "$MASTERING" -type f

ファイルごとに個別の呼び出しを必要とするのではなく、利用可能な場合はシステム呼び出し-type fによって返されたファイルタイプ情報を使用しようとするため、これはなしの検索と同じパフォーマンスを持つはずです。readdirstat

さらなる背景:

すべてのファイル システムが呼び出しでファイルtype情報を返すことをサポートしているわけではなく、すべてのバージョンのがこの拡張型情報をサポートするようにコンパイルされるわけではありません。readdirfind

find --version機能を報告する場合D_TYPE、検索はこの追加のタイプ情報の読み取りをサポートします。ファイル システム タイプ ext2、ext3、ext4 がD_TYPEフィールドをサポートします。

于 2013-01-30T01:32:47.387 に答える
1

ディレクトリを反復処理し、statそれらがファイルであるかどうかを確認するためにそれらを実行する必要があります(ディレクトリ、シンボリックリンクなどではありません)。

PS: "$FULFILLMENT" "$ARCH1" "$ARCH2" "$MASTERING" の値についていくつかの仮定をしています。

于 2013-01-30T00:57:40.103 に答える