ディレクトリ内のすべてのファイルでテキストの文字列を検索したい(そのサブディレクトリ-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
ですか?
Bashでは、globは隠しファイルに展開されないため、ディレクトリ内のすべてのファイルを検索する場合は、隠しファイル.*
と非隠しファイルを指定する必要があります*
。
「Isadirectory」エラーを回避するには、を使用できます-d skip
が、私のシステムではエラーgrep: .gvfs: Permission denied
†も発生するため-s
、すべてのエラーメッセージを非表示にするを使用することをお勧めします。
したがって、探しているコマンドは次のとおりです。
grep -s "string" * .*
別のディレクトリでファイルを検索している場合:
grep -s "string" /path/to/dir/{*,.*}
もう1つのオプションは、dotglob
シェルオプションを使用することです。これにより、globに隠しファイルが含まれるようになります。
shopt -s dotglob
grep -s "string" *
別のディレクトリにあるファイルの場合:
grep -s "string" /path/to/dir/*
†誰かが私がこのエラーを取得するべきではないと述べました。彼らは正しいかもしれません-私はいくつかの読書をしましたが、それの頭や尾を自分で作ることができませんでした。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加