Linuxでgrepを使用してファイル名だけを表示するにはどうすればよいですか?


1068

grepLinuxでファイル名のみ(インライン一致なし)を表示するにはどうすればよいですか?

私は通常次のようなものを使用しています:

find . -iname "*php" -exec grep -H myString {} \;

どうすればファイル名(パス付き)を取得できますが、一致はありませんか?使用する必要がありますxargsか?grepマニュアルページにこれを行う方法がありませんでした。


3
つまり、少なくとも1つの一致するファイル名が必要ですか?
Leonbloy、2011

4
すばらしい質問です。これを実際に使用して、Vimでgrepによって返されたファイルのリストを開きました。vim $(grep -rl Something app/)
David Tuite

1
grepコマンドを使用してファイルを一覧表示することはできません。基本的には、ファイルまたはリストから目的のテキストを取得するために使用されます。たとえば、ps aux | grep 'apt-get'またはgrep 'text-to-find' / path / to / file /
iamjayp

回答:


1625

標準オプションgrep -l(小文字のL)でこれを行うことができます。

Unix標準から:

-l
    (The letter ell.) Write only the names of files containing selected
    lines to standard output. Pathnames are written once per file searched.
    If the standard input is searched, a pathname of (standard input) will
    be written, in the POSIX locale. In other locales, standard input may be
    replaced by something more appropriate in those locales.

-Hこの場合も必要ありません。


37
このオプションの説明は、(ほとんどのmanファイルにあるように)非常に不明確です!Pfff…人間がどのようにしてお尻を痛めることができるかは驚くべきことです。
MonsieurDart

1
-Hは、マッチ自体も表示します。問題はファイル名だけでした。
Hauke、

@Haukeそして私の答えは-lでした。質問でユーザーのコマンドに-Hが含まれていて、-lが指定されている場合は冗長なので、-Hについてのみ言及しました。
Random832

2
ニース、私は個人的に他のフラグでこれを使用してのようにgrep -nrl "some text" .再帰的にサブフォルダのセット内のテキストを探しているとき
openwonk

142

grep(1)manページから:

  -l, --files-with-matches
          Suppress  normal  output;  instead  print the name of each input
          file from which output would normally have  been  printed.   The
          scanning  will  stop  on  the  first match.  (-l is specified by
          POSIX.)

4
最初の試合で停止することが必要であり、自然です。
トムソン

7
ドキュメンテーションはそれを少し不明瞭にします。「スキャンは最初の一致で停止します」-すべてのファイル名が印刷されますが、一致する単語のスキャンは最初の出現で停止します。
TheMonkWhoSoldHisCode

2
@VishalP:オカレンスがどこにあるかは関係ないので、オカレンスが存在するだけで、最初のオカレンスを超えて各ファイルを検索しても意味がありません。
Ignacio Vazquez-Abrams

17
@ IgnacioVazquez-Abramsその通りです。ドキュメントの第一印象は、最初のファイルのファイル名のみを印刷するように感じさせます。それを理解するには、実際に数回の読み取りが必要です。
TheMonkWhoSoldHisCode

5
「現在のファイルのスキャンは最初の一致で停止します。」より明確になります。
sorrymissjackson 2016年

37

単純なファイル検索では、grep -l-rオプションを使用できます。

grep -rl "mystring"

すべての検索はgrepによって行われます。もちろん、他のパラメーターでファイルを選択する必要がある場合は、findが正しい解決策です。

find . -iname "*.php" -execdir grep -l "mystring" {} +

このexecdirオプションは、各ディレクトリごとに各grepコマンドを作成し、ファイル名を1つのコマンドのみに連結します(+)。


0

あなたの質問どうすればファイル名(パス付き)を取得できます

構文例はを見つけます。-iname "* php" -exec grep -H myString {} \;

私のコマンドの提案

sudo find /home -name *.php

Linux OSでのこのコマンドの出力:

compose-sample-3 / html / mail / contact_me.php

パス付きのファイル名が必要なので、お楽しみください!


具体的には、grepを使用してファイル名取得する方法を尋ねます。
snakecharmerb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.