隠しファイルをgrepするにはどうすればよいですか?


96

Gitリポジトリを検索していて、.gitフォルダーを含めたいと考えています。

grep 実行してもこのフォルダは含まれません

grep -r search *

このフォルダーを含めるためのgrepコマンドは何でしょうか?

回答:


135

この投稿の最後にある解決策を参考にしてください。

隠しファイルを明示的に含めることができます(ディレクトリもファイルです)。

grep -r search * .*

*隠されたものを除くすべてのファイルにマッチしますし、.*唯一の隠しファイルにマッチします。ただし、特定のディレクトリに非表示でないファイルまたは非表示のファイルがない場合、これは失敗します。もちろん、の.git代わりに明示的に追加することもでき.*ます。

ただし、特定のディレクトリを単に検索する場合は、次のようにします。

grep -r search .

.非隠され、隠されたファイルの両方が含まれます、現在のパスを、一致します。


1
最初のアプローチ(grep -r search *。*)がうまくいきました。2番目の方法(grep -r search。)では、文字列が見つかりませんでした。「-r」を省略して、最上位のディレクトリのみを検索したところ、同様の結果が見つかりました。GNU grep 2.6.3を使用しています。
アラン

@アラン:それは奇妙です。私はこれを定期的に使用しています。同じディレクトリで試しましたか?
ビットマスク、2014

27
使用.*すると、親ディレクトリが含まれます(..一致するため)
sehe

1
シェルごとに動作が異なる可能性があるため、このソリューションについて一般化しても安全ですか?
astletron 2017年

6
最初のバージョンでは、-exclude-dir = ..を追加して、親フォルダーの検索を回避する必要があります
user762353

12

私はこの問題に遭遇しました、そして@bitmaskの答えに基づいて、@ seheによって指摘された問題を回避するための簡単な変更を次に示します。

grep -r search_string * .[^.]*

これを使用しても結果が得られません:sudo grep -r ANDROID_HOME * .[^.]*ここで何が問題になっていますか?
メッセルビル2018年

@messerbill検索はどこで実行していますか?
insaner

3

おそらく、「grep」と「find」コマンドを組み合わせて、次のような完全なソリューションを選択することをお勧めします。

find . -exec grep -Hn search {} \;

このコマンドは、隠しファイルまたはディレクトリ内で文字列「search」を検索し、この出力形式と一致するすべてのファイルをリストします。

ファイルパス:行番号:一致する行

./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line

2

現在のディレクトリを検索している場合は、この方法を使用することもできます(そうでない場合は、。を目的のディレクトリに置き換えます)。

find . -type f | xargs grep search

または、最上位レベルで検索したいだけの場合(これらを試しているかどうかをテストする方が速い):

find . -type f -maxdepth 1 | xargs grep search

更新:私はスコットのコメントに応じて例を変更しました。「-type f」も追加しました。


1
(1)  ~はユーザーのホームディレクトリです。質問はユーザーのホームディレクトリに関するものではなかったため、回答にはを記載しないでください  ~。(2)  findコマンドで-name '*'は、何もしません(つまり、何の目的も果たしません)。
スコット

1

現在の場所からすべての隠しファイルとディレクトリのみを検索するには:

find . -name ".*" -exec grep -rs search {} \;

すべての隠しファイルのみ:

find . -name ".*" -type f -exec grep -s search {} \;

すべての隠しディレクトリのみ:

find . -name ".*" -type d -exec grep -rs search {} \;

1

他のすべての答えは優れています。これは覚えやすいかもしれません:

find . -type f | xargs grep search

ファイル(隠しファイルを含む)のみを検索し、各ファイルを調べます。


0

特定のフォルダ内のみを検索するには、次のように使用できます。

ls -al | grep " \."

これは、grepにリストしてパイプする非常に単純なコマンドです。


0

タイラーの提案に加えて、ここに隠しファイルを含むすべてのファイルとフォルダーを再帰的にグレップするコマンドがあります

find . -name "*.*" -exec grep -li 'search' {} \;

0

マッチング防止のため...ファイルを隠されていない、あなたが使用することができgrepls -A、この例のように:

ls -A | grep "^\."

^\. 最初の文字は .

-Aまたは--almost-allオプションの除外結果...これだけ隠しファイルとディレクトリが一致していること。


0

隠しディレクトリファイルのように、特定のタイプの隠しファイルを検索することもできます。

grep -r --include=*.directory "search-string"

これは他のオプションのいくつかよりもうまくいくかもしれません。機能した他のオプションは遅すぎる可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.