「find」コマンドを使用してディレクトリをより効率的に検索する方法
このチュートリアルでは、Linux でディレクトリを検索するさまざまな方法を説明します。すでにご存知かもしれませんが、Linux ではディレクトリを含むすべてがファイルです。 Linux ユーザーがコマンド ライン内で行う一般的な操作の 1 つは、ファイルまたはディレクトリの検索です。
コマンド ラインでファイルを検索するには、検索、検索、どれなど、さまざまな手段やユーティリティが使用されます。ただし、最後のユーティリティ (どれ) はコマンドを見つけるためにのみ使用されます。
このチュートリアルの範囲では、主に find ユーティリティに焦点を当てます。このユーティリティは、ライブ Linux ファイルシステム上のファイルを検索し、locate と比較して効率的で信頼性が高くなります。
locate の欠点は、updatedb によって作成された 1 つ以上のデータベースを読み取り、ライブ ファイル システムを検索しないことです。さらに、どこから検索するか (開始点) についても柔軟性がありません。
以下は、locate コマンドを実行するための構文です。
# locate [option] [search-pattern]
locate の欠点を示すために、現在の作業ディレクトリで pkg
という名前のディレクトリを検索していると仮定します。
注: 以下のコマンドでは、オプション --basename
または -b
が locate< を指示します。 は、ファイル (ディレクトリ) のベース名 (正確に pkg) のみに一致しますが、パス (/path/to/pkg) には一致しません。 \
がグロビング文字である場合、pkg の *pkg* による暗黙的な置換が無効になります。
$ locate --basename '\pkg'
上記のコマンド出力からわかるように、locate はルート (/) ディレクトリから検索を開始します。そのため、同じ名前を持つ他のディレクトリが一致します。
したがって、この問題に対処するには、以下の簡略化された構文に従って検索を使用します。
$ find starting-point options [expression]
いくつかの例を見てみましょう。
現在の作業ディレクトリ内で上記と同じディレクトリ (pkg)
を検索するには、次のコマンドを実行します。ここで、-name
フラグは式を読み取ります。この場合、ディレクトリのベース名。
$ find . -name "pkg"
「許可が拒否されました」エラーが発生した場合は、次のように sudo コマンドを使用します。
$ sudo find . -name "pkg"
次のように -type
フラグを使用してファイルの種類 (以下のコマンドでは d
はディレクトリを意味します) を指定することで、 find がディレクトリ以外の他のファイル タイプを検索しないようにすることができます。
$ sudo find . -type d -name "pkg"
さらに、ディレクトリを長いリスト形式でリストしたい場合は、アクション スイッチ -ls
を使用します。
$ sudo find . -type d -name "pkg" -ls
次に、オプション -iname
により、大文字と小文字を区別しない検索が有効になります。
$ sudo find . -type d -iname "pkg"
sudo find . -type d -iname "PKG"
さらに興味深く高度な使用法情報を見つけるには、find と locate のマニュアル ページを読んでください。
$ man find
man locate
最後に、locate コマンドと比較すると、Linux システム内のファイル (またはディレクトリ) を検索する場合、find コマンドの方が信頼性が高く効率的です。
以前と同様に、以下のコメントセクションからフィードバックや質問を忘れずにお送りください。最後に、 常にTecmint に接続したままにしてください。