Linuxシステムでファイルを探す場合、findコマンドを使えば簡単だ。findを使えば、名前、部分名、日付、更新時間、サイズなどでファイルを検索できる。ファイルがどのディレクトリにあるか知っていれば、findコマンドでそのディレクトリを指定できる。そうでない場合は、ルート(/)ディレクトリから始まるLinuxシステム全体を検索できます。このWikiHowでは、Linuxでfindコマンドを使って、ダウンロードしたファイルから設定ファイルまで、あらゆるファイルを検索する方法を説明します。
知っておくべきこと
- findの基本的な構文は、find <開始ディレクトリ> <オプション> <検索語> です。
- ファイルの正確な名前がわからない場合は、ワイルドカードとしてアスタリスクを使うことができる。
- 大文字と小文字の区別を無視するには、-inameオプションを使う。
findの使い方:基本
-
findコマンドは通常、find /path -type f -iname filenameという構文で使う。このコマンドのバリエーションを使えば、Linuxマシン上の任意のディレクトリを見つけることができる。コマンドを簡単な部分に分けて説明しよう。
-
/path/to/fileは、ファイルを検索したいディレクトリである。例えば、カレント・ディレクトリーを検索するには、パスに .を使う。Linuxファイル・システム全体を検索するには、/をパスとして使用する。
-
-typeは、検索するファイルまたはディレクトリのタイプを示す。typeの後にはフラグを付ける。この例では、fフラグを使用している。ファイルを検索する場合、通常はこれら3つのフラグのいずれかを使用する:
-
f:これは「通常のファイル」を意味し、テキスト・ファイル、画像、プログラム、設定ファイル、実行ファイルなど、基本的にあらゆるタイプのファイル(を含む)を検索できる。
- ヒント:-type fはfindコマンドのデフォルトである。つまり、(ディレクトリやシンボリックリンクではなく)ファイルを探している場合は、fileコマンドから-type fを省くことができる。
- d:ディレクトリ(フォルダ)を探す。
- l:他のファイルへのシンボリックリンクを検索する。
- カンマで区切って複数のタイプを検索することができる。例えば、"etc "と呼ばれるすべてのファイル、ディレクトリ、シンボリックリンクを検索するには、find / -type f,d,l -iname etc とする。
-
f:これは「通常のファイル」を意味し、テキスト・ファイル、画像、プログラム、設定ファイル、実行ファイルなど、基本的にあらゆるタイプのファイル(を含む)を検索できる。
-
-inameは、大文字小文字の区別を無視するようにfindに指示する。これは、ファイル名や大文字小文字が100%確実でない場合に重要である。ただし、大文字と小文字を区別して検索したい場合は、-inameを大文字と小文字を区別する-nameに置き換えてください。
-
filenameは、探しているファイルの名前である。正確なファイル名がわかっている場合は、完全に入力する。そうでない場合は、検索語の任意の場所にワイルドカードを使用できます。
- 例えば、コンピューター上のすべてのコンフィギュレーション・ファイルを探すには、find / -type f -iname "*.conf "とします。これは、.confで終わるファイル名を返します。
名前または部分名による検索
-
正確な名前でファイルを検索するには、find /path -iname filename を使います。ファイルの正確な名前とディレクトリがわかっている場合は、このコマンドを使って探すことになる。
-
ワイルドカード文字*を使うと、クエリーの一部に一致するものを検索することができる。ワイルドカード * 文字は、フルネームがわからないときにファイルを探すのに便利です。これは、特定のファイル拡張子(例えば、.pl や .c)を持つファイルを見つけるのに役立ちます。役に立つ例をいくつか挙げよう:
-
find /home/pat -iname "*.conf"
- これは、Patのユーザーとサブディレクトリにあるすべての.confファイルを返します。
-
find / -type d -iname "*lib*"
- このコマンドは、文字列 "lib "を含むLinuxファイルシステム上のすべてのディレクトリを検索する。
-
find /home/pat -iname "*.conf"
-
lessコマンドで検索結果を管理しやすくする。検索結果がたくさん出てきた場合、それらをふるいにかけるのは難しいかもしれない。結果を less コマンドにパイプすることで、簡単にスクロールできるようになる。 例えば
- find /home/pat -iname "*.conf"| less
時間と日付で探す
-
更新日時(日単位)でファイルを探すには、-mtime オプションを使う。このオプションは、ある日数前(または2つの日数の範囲内)に最後に更新されたファイルを見つけたいときに使う。いくつかの例を挙げよう:
-
find /home/pat -iname "*.txt " -mtime -2
- このコマンドは、/home/patディレクトリの.txtで終わるファイルのうち、過去2日以内のものをすべて検索します。
- 日数の前に+を付けると「x日前より長い」ことを示し、-を付けると「x日前より少ない」ことを示します。 例えば、以下のようになります:
- find .-mtime +90 : このコマンドは、現在のディレクトリにある90日以上前に変更されたファイルをすべて表示する。
- find /home/pat -iname "*test*" -mtime -90 : このコマンドは、/home/patにある、過去90日間に編集されたファイル名の中に "test "が含まれるファイルをすべて表示します。
- 日単位ではなく分単位で更新されたファイルを探したい場合は、代わりに -mmin を使う。例えば、カレント・ディレクトリーで過去10分間に更新されたすべてのファイルを見つけるには、find .-type f -mmin -10となる。
-
find /home/pat -iname "*.txt " -mtime -2
-
atimeと-ctimeは、最後にアクセスされた日付または作成された日付でファイルを検索するために使用する。mtimeを-atimeに置き換えると、最後にアクセス(オープン)された日付で、-ctimeを-ctimeに置き換えると、ファイルが作成された日(15日前、90日以上前など)で検索することができる。
- 日単位ではなく分単位で検索したい場合は、-atimeを-aminに、-ctimeを-cminに置き換えてください。
-
2つのタイムスタンプ間のファイルを検索する。2つの特定の日時の間のファイルを検索するには、-newermtオプションを使用します。このオプションはコマンドの中で2回使う必要がある。以下のようになる:
-
find / -type f -newermt "2022-12-02 11:00:00" !-newermt "2023-2-08 12:00:00" !
- このコマンドは、タイムスタンプが12/02/2022 AM 11:00から2/08/2023 PM 12:00の間にあるLinuxシステム上のすべてのファイルを見つける。
-
find / -type f -newermt "2022-12-02 11:00:00" !-newermt "2023-2-08 12:00:00" !
サイズによる検索
-
検索結果をサイズで絞り込むことができます。似たような名前のファイルがたくさんあるが、探しているサイズがわかっている場合、サイズで検索結果を絞り込むことができます。
-
find / -size +50M -iname ファイル名
- この例では、50メガバイト以上の結果を返します。
- または-を使用すると、それ以上またはそれ以下のサイズを検索できます。
- または-を省略すると、指定したサイズどおりのファイルを検索します。
- バイト(c)、キロバイト(k)、メガバイト(M)、ギガバイト(G)、または512バイトブロック(b)でフィルタリングできます。
-
find / -size +50M -iname ファイル名
所有者または権限による検索
-
user、-group、および -perm オプションを使用して、所有者やパーミッション別にファイルを検索します。あるユーザーが所有する特定のファイルや、 を持つファイルを検索する場合は、検索を絞り込むことができます。
-
例
- find / -user pat -iname filename は、ユーザー pat が所有する filename という名前のファイルを検索します。
- find / -group users -iname filename は、users グループに属する filename という名前のファイルを検索します。
- find / -perm 777 -iname filename は、パーミッション 777(制限なし)の filename という名前のファイルを検索します。
-
例
検索コマンドの組み合わせ
-
検索フィルタを組み合わせるには、ブーリアン演算子を使用します。and、-or、-not 演算子を使用すると、異なるタイプの検索を 1 つにまとめることができます。例えば
- find /travelphotos -type f -size +200k -not -iname "*2015*" とします。
- このコマンドは、"travelphotos "ディレクトリにある、サイズが200kbを超え、ファイル名のどこにも "2015 "が含まれていないファイルを検索します。
見つかったファイルにアクションを実行する
-
ファイルが見つかったら、コマンドを組み合わせてアクションを実行します。findと他のコマンドを組み合わせて、クエリーによって返されたファイルに対して実行することができます。この機能は、検索結果に表示されるファイルにも使用できます。find コマンドと 2 番目のコマンドを -exec フラグで区切り、{} で行を終えます。\;.例えば
- find .-type f -perm 777 -exec chmod 755 {}」のようにします。\;
- これはカレント・ディレクトリ(およびすべてのサブ・ディレクトリ)でパーミッションが777のファイルを検索します。そしてchmodコマンドを使って755にする。
ファイル内のテキストを検索する
-
ファイル内の文字列を検索するには、grepコマンドを使う。特定のフレーズや文字列を含むファイルを探している場合、grepコマンドを使うことができる。以下は、基本的なgrepコマンドの例です:
- grep -r -i "検索クエリー" /path/to/directory/
- rフラグは検索を「再帰的」に設定するので、カレント・ディレクトリとすべてのサブ・ディレクトリから、クエリー文字列を含むファイルを検索する。
- iフラグは、大文字と小文字を区別しないことを示す。大文字小文字を区別して検索したい場合は、-iフラグを省略する。
-
余分なテキストをカットする。上記のようにgrep検索を実行すると、マッチするクエリーとともにファイル名が強調表示される。マッチするテキストを非表示にして、ファイル名とパスだけを表示するには、次のようにする:
- grep -r -i "検索クエリ" /path/to/directory/ とする。
-
エラーメッセージを隠す。grepコマンドは、正しいパーミッションのないフォルダーにアクセスしようとしたり、空のフォルダーに遭遇したりすると、エラーを返します。エラーメッセージを/dev/nullに送信すれば、出力から隠すことができる。
- grep -r -i "search query" /path/to/directory/ 2>/dev/null
コメント
最新を表示する
NG表示方式
NGID一覧