GNU/Linux >> Linux の 問題 >  >> Linux

すべてのファイルとすべてのディレクトリでGrep検索を実行する方法

Grepは、ファイルのコンテンツを検索する必要がある場合に優れたツールです。

通常、次のように1つのファイルでgrepを実行します。

grep search_term filename

Grepは非常に用途が広いです。 grepを使用してディレクトリ内のすべてのファイルを検索する場合 、次のように使用します:

grep search_term *

問題があります。現在のディレクトリ内のすべてのファイルのみを検索します。サブディレクトリは検索されません。

すべてのファイルとすべてのサブディレクトリでgrep検索を行うことができます -rを使用した現在のディレクトリの 再帰検索オプション:

grep -r search_term . 

検索を実行するディレクトリにいない場合は、ディレクトリパスを指定することもできます。

grep -r search_term directory_path

それは簡単な要約でした。わかりやすくするために、これらすべてを適切な例とともに詳しく説明します。

ディレクトリのすべてのファイルでのGrep検索

この例で使用するディレクトリ構造は次のとおりです。 empty.txtを除いて、すべてのファイルには、grep検索を実行する「simple」という用語が含まれています。

[email protected]:~/scripts$ tree
.
├── dir1
│   └── new_script.sh
├── dir2
│   └── your_script.sh
├── dir3
│   ├── empty.txt
│   └── linked.txt -> ../../sample.txt
├── my_script.sh
└── your_script.sh

3 directories, 6 files

現在のディレクトリのすべてのファイルで「simple」という単語を検索するには、ワイルドカード(*)を使用します。ワイルドカードは、実際には現在のディレクトリ内のすべてのファイルとディレクトリの名前に置き換えられます。

grep simple *

これにより、現在のディレクトリ内のすべてのファイルが検索されますが、サブディレクトリには入力されません。ディレクトリを直接grep検索することはできないため、検索結果とともに「XYZはディレクトリです」というエラーが表示されます。

実行するディレクトリと同じディレクトリにいない場合は、ディレクトリパスを指定して、/ *

で終了できます。
grep search_term directory_path/*

基本的に、ワイルドカードを使用して、指定されたディレクトリのすべての要素(ファイルとディレクトリ)を展開します。

これで、grepを使用して再帰検索を実行し、サブディレクトリ内のファイルも調べる方法を見てみましょう。

ディレクトリのすべてのサブディレクトリでのGrep再帰検索

Grepは-rを提供します 再帰検索のオプション。このオプションを使用すると、grepは現在の(または指定された)ディレクトリ内のすべてのファイルを調べ、すべてのサブディレクトリのすべてのファイルも調べます。

これは、現在のフォルダーでgrep検索を実行するために前の例で実行した再帰検索です。

grep -r simple .

結果は次のとおりです。

-Rもあります 再帰検索のオプションであり、-rとほぼ同じように機能します オプション。

grep -R simple .

では、grep -rの違いは何ですか およびgrep -R ?実際には1つだけです。 -R は逆参照検索です。これは、シンボリックリンクをたどって元のファイル(システムの他の部分にある可能性があります)に移動することを意味します。

-Rの出力を見てください 同じ例で検索:

linked.txtで追加の検索結果が得られることに気づきましたか これは基本的にシンボリックリンクであり、-rを使用してgrep検索から省略されました。 オプション?

再帰検索を実行するディレクトリにいない場合は、ディレクトリの絶対パスまたは相対パスをgrepコマンドに指定するだけです。

grep -r search_term path_to_directory

すべてが良さそうですが、再帰検索から特定のディレクトリを除外したい場合はどうでしょうか。そのための規定もあります。 grepは非常に用途の広いコマンドです。

grep -r --exclude-dir=dir_name serach_term directory_path

それではない。次の方法で、再帰検索から複数のサブディレクトリを除外できます。

grep -r --exclude-dir={dir1,dir2} serach_term directory_path

この例では、除外ディレクトリは次のようになります。

はい、上記の例で示されているように、除外は-rの両方で機能します および-R 再帰オプション。

要約する

複数のファイルとディレクトリに対してgrep検索を使用する方法の概要は次のとおりです。

Grepコマンド 説明
grep文字列* 現在のディレクトリ内のすべてのファイルを検索します
grep string dir dirディレクトリ内のすべてのファイルを検索します
grep-rstring。 すべてのサブディレクトリ内のすべてのファイルの再帰検索
grep -r string dir dirのすべてのサブディレクトリ内のすべてのファイルの再帰検索
grep-Rstring。 rと同じですが、シンボリックリンクをたどります

この簡単なgrepのヒントが気に入っていただければ幸いです。さらに必要な場合は、grepコマンドの使用に関する詳細なチュートリアルをお読みください。

このトピックについて質問や提案があれば教えてください。


Linux
  1. Linuxでディレクトリを再帰的に検索および削除する方法

  2. コマンド ライン:grep に一致するすべてのファイル名を検索して置換します

  3. すべてのファイルとディレクトリを再帰的に一覧表示する方法

  1. Linuxでファイルとディレクトリをアーカイブする方法[パート2]

  2. ディレクトリを検索し、正規表現に一致するファイルを見つけるにはどうすればよいですか?

  3. 特定のユーザーが書き込み可能なすべてのファイルとディレクトリを見つけるにはどうすればよいですか?

  1. Linuxでファイルとディレクトリをコピーする方法

  2. ファイルとディレクトリで特定の文字列または単語を見つける方法

  3. Linuxでファイルとディレクトリをアーカイブする方法[パート1]