ディレクトリ内のすべてのファイルでテキストの文字列を検索したいです(サブディレクトリ-r
ではなく、オプションがそれを行うことは知っていますが、それは私が望んでいるものではありません)。
ランニング
grep "string" /path/to/dir
これを行うことができるはずですが、私は読んでいますが、それは私にエラーを与えます:
grep:dir:ディレクトリです
次に、
grep
複数のファイルで実行してみました。grep "string" .bashrc .bash_aliases
完全に動作します。grep "string" .bash*
意図したとおりに機能します。grep "string" *
私にエラーを与えます:grep: data: Is a directory grep: Desktop: Is a directory grep: Documents: Is a directory grep: Downloads: Is a directory ...
エラーのみが出力され、一致する行が表示されません。-s
オプションを使用してみましたが、役に立ちませんでした。
だから、私の質問:
grep
(1)のように、できるはずなのにディレクトリで使用できないのはなぜですか?私はそれがインターネットでたくさんの例で行われているのを見てきました。
編集:「ディレクトリでgrepを使用する」と言うとき、「そのサブディレクトリを除くそのディレクトリ内のすべてのファイルを検索する」という意味です。これは、ファイルの代わりにディレクトリを渡すときにgrepが行うことだと思います。私は間違っていますか?grep
(2)のコマンドの動作を説明する仕組みについて説明してください。
編集:より具体的にさせてください。なぜワイルドカードを使用して複数のファイルを指定して.bash*
、*
またはでなく、で検索するの./*
ですか?を使用して、ディレクトリ内のすべてのファイル(およびサブディレクトリではない)を検索するにはどうすればよい
grep
ですか?
grep "string" .bash*
ます。
grep "string" * .* 2>/dev/null
またはgrep -s "string" * .*
*
、グロブリングと呼ばれるのようなワイルドカードを展開するシェルに依存しています。グロビングには.bashrc
、標準などのドットで始まるファイル名は含まれません。これらのファイルが含まれるようにシェルオプションを設定できますが、何をしているのかわからない場合は、少し混乱する可能性があります。グロビングを理解するための優れたガイドは、ここで見つける