Linux でファイルとフォルダを検索する

Niraj Menon 2023年1月30日
  1. Bash での find コマンドの基本的な使用法
  2. Bash での find コマンドの高度な使用
Linux でファイルとフォルダを検索する

Bash コマンドラインを使用していて、特定の種類のファイル、または特定の名前で始まるフォルダーを特定の場所で検索する必要がある場合はどうしますか?find コマンドは、幅広い基準に適合する可能性のあるファイルやフォルダーを見つけるのに役立ち、その結果、Linux の強力なコマンドラインユーティリティです。

このチュートリアルでは、Bash シェルコンテキストでの find コマンドの使用について説明し、基本的な使用法、高度な使用例、および他の Bash シェル機能と組み合わせた使用法について説明します。

Bash での find コマンドの基本的な使用法

find コマンドは、プレーンファイルから、正規表現を満たす複数のファイルやフォルダーまで、あらゆるものを検索するために使用される用途の広いツールです。現在のディレクトリでのみ特定のファイルまたはフォルダを検索する最も簡単な使用例は、次のように実行できます。

find filename.ext
find foldername

対応するコマンドを実行した後、ファイルまたはフォルダが存在する場合、それらの名前が出力されます。

find コマンドは、ディレクトリを検索し、サブディレクトリを入力して、指定されたファイルまたはフォルダを見つけることもできます。現在のディレクトリのフォルダに test という名前のファイルが多数散在しているとします。

それらがどこにあるかを確認するには、次のように入力します。

find . -name test -type f

コードは、現在のディレクトリとサブディレクトリにある test という名前のすべてのファイルへのパスを返す必要があります。パラメータ -type f を使用すると、test という名前のディレクトリもキャッチされなくなります。プログラマーであれば、これらの多くを使用する必要があります。

-name パラメーターは一目瞭然ですが、tEST、Test、TeST などの名前をキャッチするために指定された名前を検索するときに大文字と小文字を区別したくない場合は、代わりに -iname パラメーターを使用できます。iinsensitive を意味します。

Bash グロブは、find コマンドの使用と厳密には関連していません。パターンに存在する文字または文字の数がわからない場合は、パターンに配置されたアスタリスクを使用できます。

たとえば、次のファイルをキャッチしたい場合:test、test2、test_3、testt1、glob を使用して、すべてが test という単語で始まるという事実に基づいてこれらのフレーズをキャプチャできます。

次のコマンドはこれを行います。

find . -name test*

コードは、test という単語で始まるファイルまたはディレクトリ(-type f パラメータの削除に注意)を返す必要があります。

Bash での find コマンドの高度な使用

find コマンドは、さまざまな基準に一致するように拡張できます。複数のグロブまたは名前に基づいてファイルをキャプチャする場合は、-o または OR 関数の使用を検討することをお勧めします。

たとえば、ディレクトリ内で PDF ファイルと Word DOC / DOCX ファイルの両方を検索する場合は、次の方法で検索できます。

find -iname '*.pdf' -o -iname '*.doc' -o -iname '*.docx'

拡張子が大文字に設定されているファイルをキャッチするための鈍感な名前パラメータは、特定のプログラムの場合に当てはまります。

RegEx に精通している場合は、パターンを使用して、-regex または -iregex パラメーターを使用して複数の基準を指定することもできます。

上記と同じ拡張子をキャッチし、さらに test で始まるファイルを探すには、次のパターンを使用できます。

find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f

括弧やパイプ記号などの特殊な正規表現文字にバックスラッシュを使用すると、Bash がそれらを処理できなくなり、文字列全体が直接 find コマンドに渡されて、正規表現が失敗するのを防ぎます。

最後に、find コマンドの出力の使用方法に関するいくつかの議論-文字/単語/行のカウントユーティリティである wc にパイプすることで、一致したファイルとフォルダの出現回数をカウントできます。

find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f | wc -l

データを変数に保存して、スクリプトの後半でコマンドによって解析することができます。

DOCS=$(find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f)

スペース、改行、括弧などの特殊文字がファイルパスに存在する可能性があり、そのような変数をコマンドに渡すときに奇妙な動作が発生する可能性があることに注意してください。このようなデータを処理するときは、それに応じて IFS 区切り文字を設定してください。

find コマンドは、xargs 操作と同様のアイテムごとのコマンド実行も提供します。これは、-exec パラメーターを使用して実現できます。

たとえば、一致するすべてのファイルとフォルダーのアクセス許可を取得する場合は、次の手順を実行します。

find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f -exec ls -l {} \;

関連記事 - Bash File

関連記事 - Bash Directory