Linuxで複数ファイル内のテキストを検索する方法

クイック回答

テキストファイルを検索: プレーンテキスト、コード、ログ、設定ファイルには、grep または ripgrep を使用します。
ドキュメント内を検索: PDF、Word、Excel、LibreOffice などには、デスクトップアプリを使用します。
内容ではなくファイル名で探す場合: find または locate を使用します。

 

ここで紹介するもの以外も含め、幅広い Linux ファイル検索コマンドとアプリケーションをテストし、その中から最も実用的で効果的な方法を選びました。この記事全体で使用しているものと同じ TXT、PDF、ODT、DOCX などのファイル群を使い、Ubuntu 上で各例をテストしました。

 

まず以下の表で適切な方法を選び、該当するセクションに進んでください。

 

 

どの Linux 検索方法を使うべきか?

 

最適な方法は、主に検索するファイルの種類によって異なります。

 

タスク 最適な選択肢
標準の Linux コマンドでテキストファイルを検索する grep
大きなフォルダー内のテキストファイルをすばやく検索する ripgrep
内容ではなく名前でファイルを探す find または locate
PDF、Word、LibreOffice、Excel などのドキュメント内を検索する SeekFast
無料のオープンソース型インデックス作成ドキュメント検索ツールを使用する Recoll または DocFetcher

 

grepripgrep はテキストファイルの中身を検索し、findlocate はファイル名とパスを検索します。これらのツールは技術系ファイルには非常に優れていますが、複雑なドキュメント形式の中身を確実に検索できるわけではありません。そのため、ドキュメントでいっぱいのフォルダーに適した方法は、ログやコードでいっぱいのフォルダーに適した方法とは異なります。

 

 

grep コマンドでファイル内のテキストを検索する

 

grep コマンドは、ファイル内のテキストを検索するための標準的な Linux ツールです。プレーンテキスト、ソースコード、ログ、CSV ファイル、Markdown ファイル、設定ファイルに最適です。

 

現在のフォルダーにある .txt ファイルから単語を検索するには、次を使用します。

grep "budget" *.txt

 

フォルダーとそのすべてのサブフォルダーを検索するには、再帰検索を使用します。

grep -R "budget" ~/Documents/stories

 

実際には、結果を使いやすくするため、通常は行番号とファイル名も表示するようにしています。

grep -RIn "budget" ~/Documents/stories

 

各オプションの意味は次のとおりです。

  • -R はフォルダーを再帰的に検索します。
  • -I はバイナリファイルをスキップします。
  • -n は行番号を表示します。
Recursive grep search for budget in text files on Linux, with an arrow highlighting the command

 

大文字と小文字を区別しない検索

大文字と小文字の違いを無視するには、-i を追加します。

grep -RIn -i "report" ~/Documents/stories

 

これにより、"report"、"Report"、"REPORT" を検索できます。

 

単語全体のみを検索する

単語全体に一致させるには、-w を追加します。

grep -RIn -w "policy" ~/Documents/stories

 

これにより、"policyholder" のような長い単語の一部に一致することを避けられます。

 

特定のファイル形式のみを検索する

特定の拡張子を持つファイルだけを検索するには、--include を使用します。

grep -RIn --include="*.txt" "budget" ~/Documents/stories

 

複数の拡張子を指定する場合は、オプションを繰り返します。

grep -RIn --include="*.txt" --include="*.md" "budget" ~/Documents/stories

 

これは、多数のファイル形式が含まれるフォルダーから、テキストベースのファイルだけを検索したい場合に便利です。

 

検索からフォルダーを除外する

大きなフォルダーには、archivedrafts、バックアップなど、検索したくないディレクトリが含まれていることがよくあります。次のように除外できます。

grep -RIn --exclude-dir="archive" --exclude-dir="drafts" "risk" ~/Documents/stories

 

これにより結果が見やすくなり、検索速度も大幅に向上する可能性があります。

 

完全一致のフレーズまたは複数の文字列を検索する

完全一致のフレーズを検索するには、フレーズを引用符で囲みます。

grep -RIn "sales report" ~/Documents/stories

 

複数の文字列のいずれかを検索するには、各文字列に -e オプションを1つずつ追加します。

grep -RIn -e "sales" -e "budget" -e "payment" ~/Documents/stories

 

-E を使って拡張正規表現を使用することもできます。

grep -RInE "customer|product|service" ~/Documents/stories

 

どちらのコマンドも、少なくとも1つの文字列を含む行に一致します。別々の行にあっても "sales" と "payment" の両方を含むファイルが必要な場合は、2段階でファイル名を絞り込みます。

grep -RIlZ "sales" ~/Documents/stories | xargs -0 -r grep -Il "payment"

grep search for sales, budget, and payment with file and directory filters on Linux

以上が grep コマンドの最も一般的な使用例です。完全なリファレンスについては、GNU grep マニュアルを参照してください。

 

grep では不十分な場合

grep コマンドは強力ですが、あくまでもプレーンテキスト検索ツールです。通常、読み取り可能なテキストとして保存されているファイルではうまく機能します。しかし、Word 文書、Excel スプレッドシート、LibreOffice ファイル、PDF、電子書籍などのドキュメント形式を検索する汎用的な手段には向いていません。

 

さまざまなドキュメントが混在するフォルダーで grep を使うと、重要な一致を見逃したり、読めない出力が表示されたりすることがよくあります。そのような場合は、ドキュメント検索ツールのセクションに進んでください。

 

 

ripgrep でコマンドライン検索を高速化する

 

通常 rg として実行される ripgrep は、最新のコマンドライン検索ツールです。公式 ripgrep ガイドでは、デフォルトでディレクトリを再帰的に検索し、自動フィルタリングを適用すると説明されています。大規模なコードやテキストのフォルダーを再帰検索する場合、標準の grep より高速なことがよくあります。

 

現在のフォルダーとそのサブフォルダーを検索するには、次を使用します。

rg "budget"

 

特定のフォルダーを検索するには、次を使用します。

rg "budget" ~/Documents/stories

 

特定のファイル形式のみを検索するには、次を使用します。

rg "budget" -g "*.txt" ~/Documents/stories

 

ripgrep はデフォルトで .gitignore も尊重します。生成されたファイルや無関係なファイルの多くを自動的にスキップするため、ソースコードプロジェクトで便利です。

 

コード、ログ、Markdown、設定ファイルなどのプレーンテキストを検索するときは ripgrep を使用してください。PDF、Word、LibreOffice、Excel などのドキュメントには、代わりにドキュメント検索ツールを使用します。

ripgrep search for sales, marketing, and customer in a Linux folder

 

grep と ripgrep のどちらを使うべきか?

どちらもプレーンテキストの内容を検索しますが、それぞれ少し異なるワークフローに適しています。

  • ほぼすべての Linux システムですでに利用できる標準コマンドが必要なら、grep を使用します。
  • コードリポジトリや大きなテキストフォルダーを高速に再帰検索するなら、ripgrep を使用します。
  • ripgrep はデフォルトでサブフォルダーを検索し、.gitignore を尊重します。一方、grep コマンドでは再帰オプションが必要であり、パスを除外しない限り、より文字どおりに検索します。
  • PDF、Word、Excel、LibreOffice などの複雑なドキュメント形式には、どちらのコマンドでもなくドキュメント検索ツールを使用します。

 

Ubuntu、Mint、Fedora、Debian などの Linux ディストリビューションに ripgrep をインストールする方法

ripgrep の検索コマンドは、どの Linux ディストリビューションでも同じです。パッケージマネージャーに応じて、インストールコマンドだけが変わります。以下のコマンドは、公式 ripgrep インストール手順に基づいています。

 

ディストリビューション ripgrep のインストール
Ubuntu、Linux Mint、Debian sudo apt install ripgrep
Fedora sudo dnf install ripgrep
openSUSE sudo zypper install ripgrep
Arch Linux sudo pacman -S ripgrep

 

 

Linux で名前からファイルとディレクトリを探す

 

ファイル名の全部または一部が分かっている場合は、find コマンドを使用します。GNU Findutils マニュアルには、ファイル名、時刻、サイズなどのフィルターが記載されています。このコマンドはファイル内に保存されているテキストを検索しません。その場合は、grep または ripgrep を使用してください。

 

stories フォルダーとそのサブフォルダーから、名前に特定の単語を含むファイルを探すには、次を使用します。

find ~/Documents/stories -type f -iname "*profit*"

 

大文字と小文字を区別せず部分一致させるには、-iname を使用します。

find ~/Documents/stories -type f -iname "*shopping*"

 

アスタリスクは、"shopping" の前後にある任意の文字列に一致します。ファイルではなくディレクトリを探すには、-type f-type d に変更します。

find ~/Documents/stories -type d -iname "*archive*"

 

拡張子、更新日、サイズでファイルを絞り込むこともできます。

find ~/Documents/stories -type f -iname "*.pdf"

find ~/Documents/stories -type f -mtime -7

find ~/Documents/stories -type f -size +100M

 

これらのコマンドはそれぞれ、PDF ファイル、おおよそ過去7日以内に更新されたファイル、100 MB を超えるファイルを検索します。

 

locate でファイルをより速く探す

locate コマンドは、毎回ファイルシステムをスキャンする代わりにファイル名データベースを検索するため、通常は find よりもはるかに高速にファイル名を検索できます。plocate マニュアルでは、このインデックス検索の仕組みについて説明しています。

locate -i "profit"

 

locate はインデックスを使用するため、ごく最近作成されたファイルは、データベースが更新されるまで表示されない場合があります。データベースを更新する権限があるシステムでは、次を使用します。

sudo updatedb

 

最新の結果や詳細なフィルターが必要な場合は find を使用します。インデックス化された場所全体から、既存のファイル名を最速で検索したい場合は locate を使用します。

Comparison of find and locate commands for filenames containing profit on Linux

 

各 Linux 検索方法が実際に検索する対象ツールによって検索するファイルの階層が異なります。
Four searchable layers in Linux with find, locate, grep, ripgrep, SeekFast, Recoll, DocFetcher, and ChatGPT

 

Linux 向けの最適なドキュメント検索ツール

 

grepripgrep はプレーンテキスト用に設計されています。PDF、Word、Excel、LibreOffice、電子書籍などの形式を検索するには、以下のドキュメント検索アプリケーションのいずれかを使用してください。画像のみのスキャン PDF には、先に OCR が必要です。

 

さまざまな種類のドキュメントが含まれるフォルダーを検索し、一致した文をプレビューして、関連度順の結果をターミナルを使わずに確認したい場合は、SeekFast が適しています。新しいフォルダーや頻繁に内容が変わるフォルダーを検索する必要がある場合に、特に便利です。

 

無料のオープンソースソフトウェアを好み、事前にインデックスを作成することに抵抗がない場合は、RecollDocFetcher が適しています。インデックス作成には多少の準備が必要ですが、確立されたドキュメントコレクションを繰り返し検索する際に、より実用的になります。

 

ChatGPT デスクトップアプリは、異なるアプローチを取ります。選択したフォルダーを操作し、自然言語による質問への回答、ファイルの比較、調査結果の要約が可能です。完全な完全一致検索の唯一のツールとしてではなく、情報を理解する必要があるときの補助ツールとして使うのに最適です。

 

 

SeekFast

 

SeekFast は、Windows、macOS、Linux 向けのドキュメント検索ツールです。ターミナルからプレーンテキストファイルだけを検索するのではなく、大量のドキュメントコレクションの中身を検索するために設計されています。

 

主な利点は利便性です。フォルダーを選択して検索語を入力すると、各ファイルを開く前に一致した文を確認できます。正確なファイル名が分からず、多数のドキュメントの中身を検索する必要がある場合に便利です。

SeekFast search for company and sales across PDF, TXT, and DOCX files on Linux

SeekFast は多数の形式の中身を検索し、関連度によって結果を順位付けできるため、さまざまな種類のドキュメントがフォルダーに混在している場合に特に便利です。そのため、従来の完全一致型ファイル検索よりも、ウェブ検索に近い使用感が得られます。

 

主な機能は次のとおりです。

  • ドキュメント検索 - PDF、Word、LibreOffice、Excel、テキストファイル、電子書籍など、120種類を超える対応ファイル形式を横断検索できます。
  • 一致した文のプレビュー - ファイルを開く前に関連テキストを確認できます。
  • 関連度順の結果 - より適切に一致するファイルが結果の上位に表示されます。
  • 複数キーワード検索 - 単語が隣り合っていなくてもドキュメントを検索できます。
  • グラフィカルなワークフロー - 一般的なドキュメント検索タスクのためにターミナルコマンドを組み立てる必要がありません。

 

メリット

  • 実際のドキュメントを含むフォルダーでは、grep よりもはるかに便利です。
  • ドキュメント内の単語は覚えていてもファイル名を覚えていない場合に適しています。
  • 文脈が表示されるため、ファイルを開く前に結果を評価できます。
  • PDF、Office、LibreOffice、テキストなどの形式が混在するフォルダーに便利です。

 

デメリット

  • SeekFast の無料版では、一度に検索できるファイルは最大50個に制限されています。
  • ソースコード検索で grep や ripgrep を置き換えるためのものではありません。
  • 専用コマンドラインツールのような高度な正規表現ワークフローには対応していません。

 

主な作業がコードやログファイルの検索ではなく、多数のドキュメントの中身を検索することなら、SeekFast をダウンロードして、ドキュメントフォルダーの1つで試してみてください。

 

 

Recoll

 

Recoll は、Linux などの Unix 系システム向けの無料オープンソースデスクトップ検索ツールです。インデックスを使用するため、最初に選択したフォルダーをスキャンし、その後はすばやく検索できます。

Recoll search results for business across TXT, PDF, and DOCX files on Linux

一部のドキュメント形式への対応は、システムにインストールされている補助アプリケーションに依存します。オープンソースのインデックス型デスクトップ検索ツールを求めており、設定に多少時間をかけてもよい場合に適しています。

 

メリット

  • 無料でオープンソースです。
  • インデックス型の Linux デスクトップ検索ツールとして優れています。
  • 適切な補助プログラムがあれば、多数のドキュメント形式を検索できます。

 

デメリット

  • 最初のインデックス作成と設定に時間がかかる場合があります。
  • 一般ユーザーにはワークフローが技術的に感じられる場合があります。
  • ドキュメント形式への対応は、インストール済みのシステムパッケージに依存する場合があります。

 

 

DocFetcher

 

DocFetcher は、Linux、Windows、macOS 向けの無料オープンソースデスクトップ検索アプリケーションです。DocFetcher Pro は、追加機能を備えた別の有料版です。Recoll と同様に、選択したフォルダーのインデックスを作成して動作します。

DocFetcher search results for business with a matching document preview on Linux

DocFetcher は、PDF、Microsoft Office、OpenDocument、HTML、プレーンテキストなどの一般的なドキュメント形式に対応しています。無料のクロスプラットフォームツールを求めており、検索前にインデックスを作成することに抵抗がない場合に便利です。

 

メリット

  • 標準の DocFetcher エディションは無料でオープンソースです。
  • Linux、Windows、macOS で利用できます。
  • インデックス化したドキュメントのテキストプレビューを表示できます。

 

デメリット

  • フォルダーの内容を検索する前に、インデックスを作成する必要があります。
  • 多くの最新検索ツールと比べて、インターフェースが古く感じられます。
  • インデックスを準備せず、一度限りのフォルダーを頻繁に検索する場合には不便です。

 

 

 

ChatGPT デスクトップアプリは、対応する Linux ディストリビューション向けにプレビュー版として提供されています。従来型のファイル検索プログラムではありません。代わりに、選択したフォルダー内のファイルを操作できる AI ワークスペースです。

 

ローカルファイルで使用するには、ChatGPT Work または Codex でローカルフォルダーを開き、使用するファイルへのアクセスを許可します。その後、次のように自然言語で質問できます。

  • 「ビジネスリスクについて説明しているドキュメントを探してください。」
  • 「売上レポートを比較し、最も重要な違いを示してください。」
  • 「このプロジェクトに関連する情報を探して要約してください。」
Codex in the ChatGPT desktop app summarizing business risks from local files on Linux

このアプローチは、正確な表現を覚えていない場合に最も役立ちます。ChatGPT は意味に基づく検索、複数ファイルの情報の関連付け、検索結果の要約、結果の説明に役立ちます。Codex はソースコードプロジェクトの検索と分析もできます。

 

メリット

  • キーワードや正規表現だけでなく、自然言語による質問を受け付けます。
  • 複数ファイルの情報を要約、比較、解釈できます。
  • 次のステップが単なるフレーズの発見ではなく、結果の理解である場合に便利です。

 

デメリット

  • すべての完全一致箇所を確実に検出するようには設計されていないため、網羅性が重要な場合は grep または ripgrep を使用してください。
  • SeekFast、Recoll、DocFetcher のような専用のインデックス検索ワークフローは提供していません。
  • Linux 版はまだプレビュー段階であり、公式に対応しているのは一部のディストリビューションのみです。
  • ChatGPT アカウントが必要で、完全なオフライン動作ではなくオンラインサービスを使用します。機密ドキュメントで使用する前に、OpenAI が ChatGPT と Codex のデータをどのように使用するかと、ご自身のプライバシー要件を確認してください。

 

ChatGPT は従来の検索ツールを補完するものとして使用してください。完全一致のテキスト検索には grep と ripgrep が適しており、予測可能な結果でコレクションを閲覧するにはドキュメント検索アプリケーションが適しています。見つけた情報を理解、比較、要約したい場合には ChatGPT が便利です。

 

 

まとめ

 

この記事では、Linux でファイルを探し、その中身を検索するためにテストした中で、最も効果的だった方法を紹介しました。しかし、Linux ユーザーにはそれぞれお気に入りのツールやワークフローがあるものです。あなたはどの方法を使っていますか?便利なコマンドやアプリケーションで、この記事に含まれていないものはありますか?

 

次のいずれかの方法で、体験を共有できます。

 

 

よくある質問

 

1. Linux でファイル名からファイルを探すにはどうすればよいですか?
find コマンドを使用します。例:

find ~/Documents/stories -type f -iname "*profit*"

これは、大文字と小文字を区別せず、stories フォルダーとそのサブフォルダーから、ファイル名に "profit" を含むファイルを検索します。

 

2. find と grep の違いは何ですか?
find コマンドは、ファイル名、パス、ファイルのプロパティを検索します。grep コマンドは、プレーンテキストファイル内に保存されているテキストを検索します。ファイル名が分かっている場合は find を使用し、ファイル内の単語を覚えている場合は grep またはドキュメント検索ツールを使用します。

 

3. find と locate のどちらを使うべきですか?
最新の結果や詳細なフィルターが必要な場合は find を使用します。事前に作成されたインデックスからファイル名を高速に検索する場合は locate を使用します。新しく作成されたファイルは、データベースが更新されるまで locate に表示されない場合があります。

 

4. Linux フォルダー内のすべてのファイルからテキストを検索するにはどうすればよいですか?
標準的な選択肢は grep -R コマンドです。例:

grep -RIn "budget" ~/Documents/stories

これは、プレーンテキストファイル、ソースコード、ログ、設定ファイルで最も効果的です。

 

5. サブフォルダーも検索するにはどうすればよいですか?
grep -R で再帰検索を使用します。

grep -RIn "budget" ~/Documents/stories

このコマンドは stories フォルダーとそのサブフォルダーを検索し、バイナリファイルをスキップして行番号を表示します。

 

6. 特定のファイル形式だけを検索するにはどうすればよいですか?
--include を使用します。例:

grep -RIn --include="*.txt" "budget" ~/Documents/stories

複数の拡張子を指定するには、--include を繰り返します。

 

7. grep 検索からフォルダーを除外するにはどうすればよいですか?
--exclude-dir を使用します。例:

grep -RIn --exclude-dir="archive" --exclude-dir="drafts" "risk" ~/Documents/stories

 

8. 複数の候補となる単語を検索するにはどうすればよいですか?
各文字列に -e オプションを1つずつ追加します。例:

grep -RIn -e "sales" -e "budget" -e "payment" ~/Documents/stories

これは、いずれかの文字列を含む行を検索します。

 

9. ripgrep は grep より優れていますか?
ripgrep は、大きなコードやテキストのフォルダーを再帰検索する場合に、より高速で便利なことがよくあります。一方、grep コマンドはほぼすべての Linux システムでデフォルトで利用でき、一般的なテキスト検索に最適です。どちらも汎用的なドキュメント検索ツールではありません。

 

10. grep で PDF や Word ファイル内のテキストが見つからないのはなぜですか?
grep コマンドはプレーンテキスト用に設計されています。PDF、Word、LibreOffice、Excel ファイルでは、より複雑な形式でテキストが保存されているため、grep では一致を見逃したり、読めない出力が表示されたりする場合があります。これらのファイルにはドキュメント検索ツールを使用してください。

 

11. Linux で PDF、Word、LibreOffice ファイルの中身を検索する最適な方法は何ですか?
ドキュメント形式を認識する検索ツールを使用してください。プレビューと関連度順の結果が必要な場合は SeekFast が便利です。インデックス型デスクトップ検索を好む場合は、Recoll と DocFetcher が優れたオープンソースの代替手段です。

 

12. SeekFast は Linux で動作しますか?
はい。SeekFast には Linux 版があり、グラフィカルインターフェースから多数のドキュメント形式の中身を検索できます。

 

13. grep、ripgrep、SeekFast のどれを使うべきですか?
一般的なプレーンテキスト検索には grep を使用します。コードやテキストのフォルダーを高速に再帰検索するには ripgrep を使用します。PDF、Word、LibreOffice、Excel などのドキュメント内をプレビュー付きで検索する必要がある場合は、SeekFast を使用します。

著者について
Dimitar Stamenovは、ブルガリアのソフィアを拠点とするソフトウェア開発者兼起業家です。Sofia Universityを卒業し、2002年からソフトウェア開発のプロとして活動しています。Slaviana Softの創業者、マネージャー、リード開発者であり、SeekFastの開発者でもあります。長年にわたり手がけているその他のプロジェクトには、Preslav ERPとSEORanksがあります。DimitarはTelerik AcademyとSoftware Universityで、ソフトウェア関連科目とSEOを教えた経験があります。SeekFastブログでは、自身が取り上げるソフトウェアやコマンドを実際にテストし、ユーザーが現実の問題を解決できるよう毎週支援する中で得た経験を活かしています。

コメントを残す

Your email address will not be published. Required fields are marked *