ディレクトリをより効率的に検索するための「find」コマンドの使用方法

このチュートリアルでは、Linuxでディレクトリを見つけるさまざまな方法を紹介します。既にご存知のように、Linuxにおいてはすべてがファイルであり、ディレクトリも含まれます。Linuxユーザーがコマンドラインで行う一般的なことの一つはファイルやディレクトリを探すことです。

コマンドライン上でファイルを探すためには、findlocatewhichなどの異なる手段やツールが使われます。しかしながら、最後のツール(which)はコマンドを特定するためのものだけです。

このチュートリアルの範囲では、主にfindユーティリティに焦点を当てます。これは、ライブLinuxファイルシステム内でファイルを探すのに最適で信頼性が高いlocateよりもです。

ただし、locateのマイナス点は、updatedbによって作成された一つ以上のデータベースを読み取るだけであり、ライブファイルシステム内での探索を行わないということです。また、開始地点(探索の場所)についての柔軟性を提供できません。

以下は、locateコマンドを実行するためのスyntaxです。

# locate [option] [search-pattern]

locateのデメリットを示すために、現在の作業ディレクトリでディレクトリ名がpkgであるものを検索すると仮定しましょう。

注意: 以下のコマンドでは、オプション--basenameまたは-blocateにファイル(ディレクトリ)のベース名(つまりpkg)のみを一致させるように指示し、パス(/path/to/pkg)は一致させません。\はグロブ文字であり、pkg*pkg*による暗黙の置換を無効にします。

$ locate --basename '\pkg'
Find Directory Using locate Command

上記のコマンド出力からわかるように、locateはルート(/)ディレクトリから検索を開始するため、同じ名前の他のディレクトリも一致します。

したがって、この問題に対処するために、以下の簡略化された構文に従ってfindを使用します:

$ find starting-point options [expression]

いくつかの例を見てみましょう。

上記のディレクトリ(pkg)を現在の作業ディレクトリ内で検索するには、次のコマンドを実行します。この場合、-nameフラグはディレクトリのベース名となる式を読み取ります。

$ find . -name "pkg"

Permission denied」エラーが発生した場合は、sudoコマンドを以下のように使用してください。

$ sudo find . -name "pkg"
Search a Directory Using find Command

findコマンドがディレクトリ以外のファイルタイプを検索しないようにするには、-typeフラグを使用してファイルのタイプを指定します(以下のコマンドではdはディレクトリを意味します):

$ sudo find . -type d -name "pkg"

さらに、ディレクトリを長いリスト形式で表示する場合は、アクションスイッチ-lsを使用してください:

$ sudo find . -type d -name "pkg" -ls
Find and List Directory

次に、オプション-inameを使用すると、大文字小文字を区別しない検索が可能になります:

$ sudo find . -type d -iname "pkg" 
$ sudo find . -type d -iname "PKG" 
Find Directory with Case Sensitive

さらに興味深い高度な使用方法については、findlocateのmanページを読んでください。

$ man find
$ man locate

最後に、findコマンドは、locateコマンドと比較して、Linuxシステムでファイル(またはディレクトリ)を検索する際に信頼性が高く効率的です。

同様に、フィードバックや質問は以下のコメントセクションからお送りください。最後に、常にTecmintに接続していることを忘れないでください。

Source:
https://www.tecmint.com/find-directory-in-linux/