Linuxコマンドfind使い方と8つのオプション

Linuxでファイルやディレクトリを探すことは非常に重要です。Linuxコマンドfindは、特に多くのファイルの中から特定のファイルを見つける際に使用する効率的な検索ツールです。Linuxコマンドfindは、指定されたパス内でファイルやディレクトリを検索できる強力なツールであり、さまざまなオプションを使用して、より精緻な検索が可能です。

このポスティングでは、findコマンドの基本的な使い方からさまざまなオプションを説明し、実際に役立つヒントを提供します。Linuxシステムを利用する上で必須のfindコマンドをマスターしましょう。

Linuxコマンドfindとは?

findは、Linuxでファイルやディレクトリを検索する際に使用するコマンドです。このコマンドは、指定したパス内でファイル名、サイズ、修正時間など、さまざまな条件を基準にファイルを検索できます。

findコマンドは次のように使用します。

find [options...] [path...] [expression]
ShellScript

この基本形式で、パスは検索を実行するディレクトリ、検索条件はファイルを見つけるためのフィルター、そして実行する作業は見つかったファイルに対して行う追加作業を意味します。

findコマンドの基本使用法

findコマンドの基本的な使用法を見ていきましょう。最も単純な形は、特定のパス内で全てのファイルを検索することです。

find ~/linux/tree
ShellScript

上記のコマンドは、~/linux/treeディレクトリ内の全てのファイルとディレクトリを以下の図のように表示します。この場合、findコマンドはディレクトリとサブディレクトリを再帰的に探索します。

図1. Linuxコマンドfind: 実行結果
図1. Linuxコマンドfind: 実行結果

主要オプションおよび使用例

findコマンドは、さまざまなオプションを使用して検索条件を細かく調整できます。以下は、よく使われるオプションです。

名前で検索する(-name)

ファイル名で検索する際は、-nameオプションを使用します。例えば、ホームディレクトリ配下のlinux/treeパスで「app.py」という名前のファイルを探したい場合、次のように使用します。

find ~/linux/tree -name "app.py"
ShellScript

検索結果は以下の図のようになります。ここで重要なのは、-nameオプションが大文字と小文字を区別するという点です。

図2. Linuxコマンドfind: -nameオプションでファイル名で検索
図2. Linuxコマンドfind: -nameオプションでファイル名で検索

もし大文字と小文字を区別せずに検索したい場合、次のように-inameオプションを使用できます。

find ~/linux/tree -iname "app.py"
ShellScript

大文字と小文字を区別しないため、App.pyファイルとapp.pyファイルの両方が検索されました。

図3. Linuxコマンドfind: -inameオプションで大文字と小文字を区別せずにファイル名を検索
図3. Linuxコマンドfind: -inameオプションで大文字と小文字を区別せずにファイル名を検索

ワイルドカードを使用して、特定の文字列が含まれたファイルを検索することも可能です。

find ~/linux/tree -name "*.py"
ShellScript

以下は、拡張子がpyのファイルを全て検索した結果です。

図4. Linuxコマンドfind: ワイルドカードを使用してファイルを検索
図4. Linuxコマンドfind: ワイルドカードを使用してファイルを検索

もし現在のディレクトリを基準に「test」という文字列が含まれる全てのファイルを探したい場合、次のようにワイルドカードを検索したい文字列の両側に追加します。

find . -name "*test*"
ShellScript

特定タイプのファイルのみ検索する(-type)

findコマンドは、ファイルのタイプを指定して検索できます。ファイルの種類に応じて-typeオプションを使用します:

  • f: 一般ファイル
  • d: ディレクトリ
  • l: シンボリックリンク(リンクファイル)
  • c: キャラクターデバイスファイル
  • b: ブロックデバイスファイル

例えば、ディレクトリのみを検索したい場合、次のように使用します。

find ~/linux/tree -type d
ShellScript

以下の図のように、他のものは除外され、ディレクトリのみが表示されます。

図5. Linuxコマンドfind: ディレクトリのみを検索した結果
図5. Linuxコマンドfind: ディレクトリのみを検索した結果

ファイルサイズで検索する(-size)

ファイルサイズを基準に検索する場合は、-sizeオプションを使用します。サイズを表す単位は次の通りで、cとkは小文字、MとGは大文字を使用します。

  • c: バイト
  • k: キロバイト
  • M: メガバイト
  • G: ギガバイト

例えば、50バイトより小さいファイルを検索するには、次のように入力します。

find ~/linux/tree -size -50c
ShellScript

+は指定されたサイズより大きいファイルを、-は指定されたサイズより小さいファイルを意味します。したがって、+1Mと入力すると1MBより大きいファイルを検索します。

図6. Linuxコマンドfind: 容量が50バイト未満のファイルのみを検索
図6. Linuxコマンドfind: 容量が50バイト未満のファイルのみを検索

修正時間で検索する(-mtime)

ファイルが最後に修正された時間を基準に検索する際は、-mtimeオプションを使用します。例えば、過去7日以内に修正されたファイルを探したい場合、次のように使用します。

find ~/linux/tree -mtime -3
ShellScript

ここで-3は3日以内に修正されたファイルを意味し、+3は3日以前に修正されたファイルを意味します。

図7. Linuxコマンドfind: 修正されたのが3日以内のファイルのみを検索

特定ユーザーやグループのファイルを検索する(-user, -group)

特定ユーザーやグループのファイルを検索する場合、-userと-groupオプションを使用します。例えば、ユーザー「www-data」のファイルを探したい場合、次のように入力します。

find ~/linux/tree -user www-data
ShellScript

以下の図は、ファイル所有者がwww-dataであるファイルのみが検索された結果です。

図8. Linuxコマンドfind: 特定の所有者のファイルのみを検索
図8. Linuxコマンドfind: 特定の所有者のファイルのみを検索

検索結果に対する追加作業

findコマンドの強力な機能の1つは、検索結果に対して追加作業を実行できることです。最もよく使用されるオプションは-execです。このオプションを使用すると、見つかったファイルに対して特定のコマンドを実行できます。

例えば、見つかった全ての「.log」ファイルを削除したい場合、次のように使用します。

find /home/user -name "*.log" -exec rm {} \;
ShellScript

ここで{}はfindが見つけた各ファイルの名前を意味し、;はコマンドの終わりを示します。このコマンドは、全ての.logファイルを見つけて削除します。

注意事項

findコマンドは非常に強力ですが、誤って使用するとシステムの重要なファイルを誤って削除したり変更したりする可能性があります。特に-execオプションを使用する際は十分に注意が必要です。コマンドを実行する前に結果を確認し、必要に応じて-execオプションの代わりに-okオプションを使用して各作業に対して確認を求めることができます。

find /home/user -name "*.log" -ok rm {} \;
ShellScript

これにより、各ファイルを削除する前に確認メッセージが表示され、ミスを減らすことができます。

まとめ

Linuxでfindコマンドは、ファイルやディレクトリを効率的に検索できる強力なツールです。さまざまなオプションを活用することで、希望する条件に合ったファイルを簡単に見つけることができ、-execオプションを使用して自動化された作業を行うことも可能です。しかし、それだけ注意して使用する必要があり、特に重要な作業を実行する前には、常に結果を確認する習慣を持つことが重要です。

これで、findコマンドを活用してLinuxシステムでファイルを迅速かつ正確に検索できるようになりました。必要に応じて、さまざまなオプションを組み合わせて自分だけのfind活用法を作り出すのも良い方法です。

リファレンス

関連ポスト

コメントする