特に、検索の問題を引き起こす可能性があるディレクトリの中には、オペレーティングシステムがfind /
実際にファイルではなくファイルを生成するディレクトリがあります。このディレクトリには/proc
/sys
/run
。
問題は、そのようなことをしているが、find / -exec grep
これらのシステムのいくつかをクロールすると、システムが混乱する可能性があることです。
それでは、findにディレクトリを一覧表示せずにスキップするように指示するにはどうすればよいですか?誰かがこのような新しいディレクトリを作成することを決めることができるからです。リストに依存するのではなく、ディレクトリをテストし、このテストに失敗したディレクトリを除外するように選択します。
答え1
いいですね。除外されたファイルのリストに依存したくないので、少なすぎるディレクトリを除外するリスクはありません。
したがって、どのファイルを含めるかを説明しましょう。
これらの「実際のファイルではない」は、ほぼ常に別々のファイルシステムにあります。
これは「実際にはファイルシステムではありません」と似ており、ただ似ているようです。
私たちが言うことができるのは、それらが私たちの「本当の」ファイルシステムにないということです。 `/home'
にマウントされた2つのパーティションがあるとしましょう。/
optionsを使用すると、次のような既知の良い場所でのみ実行-xdev
できます。find
find / /home -xdev -exec grep ...
いくつかの奇妙なファイルはまだ通常のファイルと混在する可能性があります(上記の「ほとんどすべて」を参照)。
問題が発生します。忘れたfifo
ファイルがあり、そのファイルに対してgrepを実行すると、grepはそのファイルを読み取ろうとし、永遠に待機します。
すべての危険なタイプを除外できますが、可能なファイルタイプを見ると、シンボリックリンクなど、-type
実際に必要なタイプはあまりありません。入力された、およびの一部または全部を含める、または除外することにのみ注意してください。f
d
l
f
d
l
b
c
p
s
D
find / /home -xdev -type f -exec grep ...
またはシンボリックリンクを含める場合:
find /home/me/dirWithSomeLinksToFiles -xdev \( -type f -or -type d \) -exec grep ...
答え2
ディレクトリについては心配しないでください。 findに実際のファイルをgrepに供給するように指示するのはどうでしょうか?
find / -type f -exec grep .... {} +
私にとってはうまくいくようです(kmemをつかんでも箱が死ぬことはありません;D)。