
ワイルドカードを使ってディレクトリ/サブフォルダ内のすべてのファイルを再帰的に検索する方法
ユーザーは、ディレクトリ、フォルダー、またはサブフォルダー構造内で、特定の文字列に一致するがファイル名が異なるすべてのファイルを検索したいという状況に遭遇することがあります。このような状況は、ワイルドカード一致に基づいてファイルを検索するのに最適です。
たとえば、ファイル名のどこに「invoice」というテキストが出現するかに関係なく、ファイルシステム上で「invoice」という単語を含むすべてのファイルを検索したいとします(たとえば、次のような名前のファイル:invoice1-2023.pdf、big-invoice-wow.pdf、yourfavoriteinvoice.pdf、invoice-2-22.pdf など)。
この記事では、ファイル名自体の任意の場所に出現する可能性のあるテキスト文字列と一致するワイルドカードを使用して、ディレクトリとサブディレクトリ内のファイルを再帰的に検索するためのコマンド ラインの使用方法を、いくつかの実用的な例とともに説明します。
ワイルドカードに一致するすべてのファイルを再帰的に検索する方法
ここでは find コマンドを使用します。名前から推測できるように、このコマンドを使用すると、コマンド ラインからファイル システム内のファイルを直接検索できます。
find . -name "text*"
このコマンドは次のように分類されます。
find [ディレクトリ] (この場合、「.」は現在のディレクトリを表します) -name "[一致するテキストとワイルドカード]" (この場合、「テキスト」の後に何かが続くファイル名)。
特定のテキスト一致の前後にワイルドカードを使用して一致を検索するには、次のようにします。「text」を、使用ケースのファイルに一致する適切な構文に置き換えます。
find . -name "*text*"
冒頭で述べた例を使って、ファイル名に「invoice」というテキストを含むすべてのファイルを、ユーザーのホームディレクトリ構造全体のどこにあっても追跡したいとします。このような検索の構文は次のようになります。
find ~/ -name "*invoice*"
このコマンドを実行すると、次のようなコマンド出力が表示される場合があります。
/Users/Paul//Library/Application Support/CloudAppHoldingFiles/mystery-invoice-2023.pdf
/Users/Paul//Library/Application Support/WhoKnows/invoice-2024.pdf
/Users/Paul/Documents/big-invoice-wow.pdf
/Users/Paul/Documents/Misc/small-invoice-dontforget.pdf
/Users/Paul/Desktop/YouForgotAboutThisInvoice.pdf
/Users/Paul/Desktop/AnotherInvoice.pdf
/Users/Paul/Documents/Invoices/invoice-1-23.pdf
/Users/Paul/Documents/Invoices/invoice-3-23.pdf
/Users/Paul/Documents/Invoices/invoice-4-23.pdf
/Users/Paul/Documents/Invoices/invoice-5-23.pdf
/Users/Paul/Documents/Invoices/invoice-6-23.pdf
ご覧のとおり、このコマンドとファイルの検索は、ファイルシステム内にファイルが散在していて、名前の一致とワイルドカードですべて追跡したい場合に特に役立ちます。
SpotlightやFinderを使ってすべての一致箇所を探すこともできますが、Spotlightの最近の変更点により、すべてのファイルを見つけるのはより困難になっているようです。Finder検索ではワイルドカードを使って名前の一致箇所を探すこともできますが、多くのユーザーにとってはコマンドラインの方が簡単です。Finderの方が簡単な場合は、サブディレクトリ内のすべてのファイルを再帰的にリストするこのトリックも役立つかもしれません。
ワイルドカードの一致によってディレクトリ内のファイルを再帰的に検索するための別の推奨方法がある場合は、以下のコメントでその方法を共有してください。