Cygwinをインストールしていますが、このコマンドでソースコードを検索すると、ファイルにその文字列があっても何も表示されません。
$ echo foo > bar
$ find . -name '*' | grep foo
何も表示されません。このコマンドは GNU+Linux では正常に動作します。
$ grep foo bar
答え1
前述のように、find は見つかったファイルのリストを stdout に出力し、grep は通常、このように呼び出された場合、stdout を検索することを想定しています。
パイプ検索を に行うxargs
こともできます。標準入力からコマンドラインを構築して実行する「」のように
$ find . | xargs grep foo
改行文字などが入った奇妙なファイル名の場合は、次の方が良いでしょう:
$ find . -type f -print0 | xargs -0 grep foo
通常のファイルのみが-type f
検索されるため、ディレクトリや「奇妙な」ファイルに対して grep を実行することはありません。.
..
答え2
find . -name '*' # This will produce a list of *file names*
次にファイル名のリストをgrep
stdinに渡すと、リストはテキストとして扱われ、foo
ファイル名がないfoo
ので何も返されません。
ファイル内のテキストを再帰的に検索するには、次のようにします。
grep -R foo somefolder/
答え3
このコマンドでソースコードを検索しても何も表示されない
$ echo foo > bar
$ find . -name '*' | grep foo
find
希望する条件を満たすファイル名を検索します: 名前、サイズ、ファイルタイプ、一致するファイル名のリストを返します。コンテンツ一致するファイルの。
ファイル名のリストがgrep
パイプ演算子を使用して渡されると、grep
文字列bar
(ファイル名)が表示され、ない foo
(ファイルの内容bar
)。
grep
したがって、一致するものが見つからないため、何も出力されません。
注記:
grep
find
ファイルを直接検索できます。 . パイプを使用する必要はなく|
、xargs
別の回答で提案されているようにする必要もありません。
次のコマンドは Cygwin で動作します:
grep --exclude-dir=* "foo" ./*
例:
DavidPostill@Hal /f/test
$ cat bar
foo
DavidPostill@Hal /f/test
$ grep --exclude-dir=* "foo" ./*
./bar:foo
参考文献
- Linux の Bash コマンドラインの AZ インデックス- Bash コマンドラインに関連するあらゆることに関する優れたリファレンス。
- 探す- フォルダー階層で、名前、サイズ、ファイル タイプなどの希望の条件を満たすファイル名を検索します。
- グレップ- ファイル内で特定のテキストを検索します。
答え4
あなたはこれを望んでいると思います。
find . -name '*' -type f -exec grep foo /dev/null {} \;
ディレクトリや特殊ファイルではなく、ファイルのみを grep したい場合。/dev/null により、grep はファイル名を表示します。'-name '*' を削除したい場合もありますが、削除するとドット ファイルが grep されます。
実行することもできます
grep -r foo .