重要なファイルを必死に探した結果、すべてのディレクトリを調べようとして何時間も無駄にしたにもかかわらず、ファイルがどこにも見つからないことに気づいたことはありませんか?これは、ほとんどの Linux ユーザー、特に整理されていない膨大な数のファイルやディレクトリを持つ新規ユーザーが直面する一般的な問題です。この記事では、Linux の find コマンドを使用してさまざまな方法でファイルやディレクトリを検索する方法を説明します。
Linuxのfindコマンドとは何ですか
find コマンドは、Linux ユーザーがさまざまなオプションを使用してファイルやフォルダーを検索するのに役立つ最も重要なツールの 1 つです。返された検索項目に対してシェル コマンドを実行することもできます (詳細は後ほど!)。 find コマンドを使用してファイルとディレクトリを検索する構文は次のとおりです。
find <options> <location> <expression>
上記の構文を説明する方法は次のとおりです。
-
<options>、検索を絞り込むために使用されるさまざまなオプションです。 -
<location>find コマンドが検索するメモリ内の場所を指定します。 -
<expression>検索する検索項目を指定します。
find コマンドと組み合わせる一般的なオプションには、次のようなものがあります。
オプション
説明
-name
このオプションは、ファイルまたはフォルダーの名前を指定するために使用されます。
-type
これは、検索する項目のタイプを指定します。
-exec
exec フラグは、出力に対してシェル コマンドを実行するために使用されます。
-size
このフラグは、メモリ占有サイズに基づいて項目をフィルタリングします。
-perm
このフラグは、ファイルとディレクトリをそのアクセス許可に基づいてフィルタリングします。
-user
このフラグは、特定のユーザーが所有するファイルとディレクトリを検索するために使用されます。
Linux で find コマンドを使用する最良の方法
Linux で find コマンドを使用してファイルとディレクトリを検索する最も一般的な方法は、それぞれの名前を使用することです。正確なファイル名がわからない場合は、汎用性の高い find コマンドを使用すると、名前の一部でもファイルを検索できます。
1. 名前が一致する特定のファイルを検索する
find コマンドでファイルとディレクトリを検索するには、-iname フラグを使用します。このフラグを使用して検索する利点は、ファイル名の大文字と小文字を無視して指定された名前を検索することです。 -iname フラグを指定して find コマンドを使用する構文は次のとおりです。
find <location> -iname <search_name>
たとえば、現在のディレクトリでファイル「test.txt」を検索する場合は、次のコマンドを使用します。
find . -iname "test.txt"
ここで、「。」は、ファイルの場所の相対アドレス指定モードで現在のディレクトリを表します。相対モードが理解しにくい場合は、代わりにファイルの場所に絶対アドレス指定モードを使用することもできます。
「-iname」フラグはファイル名の大文字と小文字を無視します。ファイル名と完全に一致するファイル名を検索するには、 -iname フラグを -name フラグに置き換えます。
find <location> -name <name_to_search>
2. Linux での名前パターンによるファイルの検索
重要なファイルを操作する必要があるのに、ファイルの完全な名前を思い出せない場合があります。このような状況でも、find コマンドが救世主となることがあります。ワイルドカードを使用してファイル名のパターンと一致させるだけです。ワイルドカードは、指定されたパターンと使用可能なすべての名前の一致を試みます。現在のディレクトリでファイル「test-101.py」を探す必要があるとします。次のコマンドを使用できます。
これにより、以下に示すように、ファイル名に「test」という名前で始まるさまざまなファイルがリストされます。
find . -type f -iname "test*"
ここでは、検索項目の種類をファイルとして指定するためにタイプ f が追加されています。また、エラーを防ぐために、必ず二重引用符のペアでワイルドカード式を使用してください。
3. 名前が一致するファイルまたはディレクトリを検索します。
通常、find コマンドは、名前に一致するすべてのファイルとディレクトリを検索します。ファイルのみを検索するには、基本構文で「-type f」オプションを使用します。
find <location> -type f -name <name_to_search>
たとえば、次のコマンドは「test」という名前のファイルをすべて表示します。
find . -type f -iname "test*"
ディレクトリのみを検索するには、次のように「-type d」フラグを使用します。
find <location> -type d -iname <name_to_search>
たとえば、次のコマンドは、「test」という名前のディレクトリをすべて表示します。
find . -type d -iname "test*"
4. 特定の拡張子を持つファイルを検索する
ワイルドカードと find コマンドの強力な組み合わせを使用すると、拡張子に基づいてファイルを検索することもできます。たとえば、現在のディレクトリで構成ファイルを検索する必要があるが、正確な名前がわからない場合は、次のコマンドを使用できます。
find . -iname "*.conf"
5. サイズに基づいてファイルとディレクトリを検索する
適切なサイズ記述子と組み合わせると、 -size フラグを指定して find コマンドを使用し、メモリ内で占有されているサイズに基づいて Linux でファイルとディレクトリを検索できます。さらに、さまざまなサイズ記述子を追加して、検索するファイル サイズの制限を指定することもできます。
Linux でサイズに基づいてファイルを検索する基本的な構文は次のとおりです。
find <location> -type <search_item_type> -size <symbol><file_size><size_descriptor>
上記の構文は、「
-size <symbol><file_size><size_descriptor>
」の部分を除いて、前の構文と同じです。この部分の説明は次のとおりです。
- <symbol> 部分には、「+」または「-」を指定することも、空白のままにすることもできます。ここで、「+」は指定されたサイズを超えるファイル/ディレクトリを検索することを意味し、「-」は指定されたサイズ未満のファイル/ディレクトリを検索することを指定します。空白のままにすると、find コマンドはサイズに正確に一致するファイルを検索します。
- <file_size> はファイル/ディレクトリのサイズを指定します。
-
<size_descriptor>検索するファイル サイズの範囲を指します。
使用できるさまざまなタイプのサイズ記述子は次のとおりです。
サイズ記述子
説明
c
サイズをバイト単位で検索する find コマンドを指定します。
k
サイズをキロバイト単位で検索する find コマンドを指定します。
M
サイズをメガバイト単位で検索する find コマンドを指定します。
G
サイズをギガバイト単位で検索する find コマンドを指定します。
上記の構文は一部のユーザーにとっては非常に複雑に見えるかもしれませんが、いくつかの例を使用すると理解しやすくなります。
- Documents ディレクトリ内の 4 KB に相当するディレクトリを表示する必要がある場合は、次のコマンドを使用します。
find ~/Documents -type d -size 4k
- または、スペースが不足していて、Documents ディレクトリ内の 100 MB を超えるファイルを表示する必要がある場合は、次のコマンドを使用します。
find ~/Documents -type f -size +100M
- Documents ディレクトリ内の 10 MB 未満のファイルを表示する必要がある場合は、次のコマンドを使用します。
find ~/Documents -type f -size -10M
- Documents ディレクトリ内の空のファイルを表示する必要がある場合は、次のコマンドを使用します。
find ~/Documents -type f -size 0
6. 特定の権限に一致するファイルとディレクトリを検索する
Linux におけるアクセス許可は、ファイルとディレクトリの両方を意図しないアクセスから保護するために最も重要です。詳細については、Linux 権限に関する包括的なガイドをご覧ください。
権限セットに基づいてファイルとディレクトリを検索するには、次の構文を使用します。
find <location> -type <search_item_type> -perm <permission_set>
上記の構文では、
<permission_set>
のアドレス指定の絶対モードまたは相対モードのいずれかを使用できます。
root の読み取り専用権限を持つファイルを検索する必要があるとします。次のコマンドを使用します。
find ~/Documents/test/ -type f -perm 400
または、すべてのユーザーに対して読み取りと書き込みの両方のアクセス許可を持つファイルを検索する場合は、次のコマンドを使用します。
find ~/Documents/test/ -type f -perm a=r+w
7. ユーザーが所有するファイルとディレクトリを検索する
前に説明したように、Linux の find コマンドを使用すると、ファイルに設定されたアクセス許可に基づいてファイルを検索できます。次に、特定のユーザーが所有するファイルを表示する方法を説明します。基本的な構文は、ユーザーが所有するファイルを検索する find コマンドを指定する新しい -user フラグを除いて、ほとんど同じままです。
find <location> -type <search_item_type> -user <username>
たとえば、現在のディレクトリ内で「test」ユーザーが所有するファイルを表示したい場合は、次のコマンドを使用します。
find . -type f -user test
8. -exec フラグを指定した find コマンドの使用
-exec フラグを使用すると、find コマンドで実際のシェル コマンドを実行できるため、その機能を複数回強化できます。 -exec フラグは、返されたすべての検索結果に対してシェル コマンドを実行します。 -exec フラグを指定して find コマンドを使用する基本構文は次のとおりです。
find <location> <options> -exec <shell_command> {} ;
上記の構文では、{} は、find コマンドで見つかった検索結果をシェル コマンド内に挿入するために使用されます。例を挙げると、より明確になります。
現在のディレクトリ内の test.txt という名前のファイルを /tmp/docs/ にコピーするとします。次のコマンドを使用します。
find . -iname renaming.sh -exec cp {} ./testing \;
上の例では、「
renaming.sh
」ファイルが見つかると、「
{}
」の代わりに直接挿入され、通常のコピー手順が実行されます。最後のセミコロン (;) はコマンドの終了を示します。
次に、-exec フラグによって複数のファイルがどのように処理されるかを見てみましょう。現在のディレクトリにあるすべての .pdf ファイルをホーム ディレクトリの「ftesting」という名前の新しいディレクトリに移動したい場合は、次のコマンドを使用できます。
find .-name "*.pdf" -exec mv {} ./testing + \;
mv コマンドを使用して名前を変更したい場合は、Linux でファイルの名前を変更する方法に関する記事を参照してください。この記事では、ファイル名を変更する 4 つの異なる方法について説明しています。
9. Linux でのファイルとディレクトリの検索と削除
Linux では、特定のファイル/ディレクトリを削除する必要がある場合があります。複雑なシェルスクリプトを作成する必要があると思われるかもしれません。ただし、-exec コマンドを使用すると、指定したルールに基づいて find コマンドでフィルターされたファイルまたはディレクトリを簡単に削除できます。 find コマンドを使用してファイルを削除する基本的な構文は次のとおりです。
find <location> <options> -type <search_item_type> -exec rm -vf {} ;
一部のユーザーは、上記のコマンドを理解するのが難しいと感じるかもしれません。作業を簡単にするために、-exec 部分全体の代わりに -delete フラグを使用して項目を削除できます。 Linux で find コマンドで -delete フラグを使用してファイルを削除する構文は次のとおりです。
find <location> <options> -type <search_item_type> -delete
正確な名前のファイルとディレクトリを削除
ファイル/ディレクトリの削除は、find コマンドを使用してファイル/ディレクトリを検索するのと同じように機能します。 find を使用してファイルを削除する構文は次のとおりです。
find <location> <options> -type <search_item_type> -name <file_to_delete> -delete
現在のディレクトリにある「test.txt」ファイルを削除したい場合は、次のようにこのコマンドを使用できます。
find . -type f -name test.txt -delete
名前が部分的に一致するファイルを削除する
ファイルを削除し、名前の一部しか覚えていない場合は、ワイルドカードを使用して、指定されたファイル名に一致するあらゆる種類の名前を検索できます。 Linux で find コマンドを使用して名前の一部を持つファイルとディレクトリを削除する構文は次のとおりです。
find <location> <options> -type <search_item_type> -name <name_with_wildcard> -delete
たとえば、「test」という名前で始まるすべてのファイルを削除するには、次のコマンドを使用します。
find . -type f -name "test*" -delete
同じ拡張子のファイルを削除する
ディレクトリ内の同じ拡張子を持つすべてのファイルを削除する必要がある場合は、最後に -delete フラグを追加するだけです。同じ拡張子を持つすべてのファイルを削除する構文は次のとおりです。
find <location> -type f -name "*.<extension>" -delete
たとえば、現在のディレクトリにあるすべての .pdf ファイルを削除する場合は、次のコマンドを使用できます。
find . -type f -name "*.pdf" -delete
Linux でファイルとディレクトリを削除するその他の方法について知りたい場合は、Linux でファイルを削除する方法と Linux でディレクトリを削除する方法に関する記事を参照してください。最初は必ず削除フラグを付けずに find コマンドを実行することをお勧めします。結果に満足したら、-delete フラグを適用して最終的に項目を削除できます。
findコマンドで空のファイルとディレクトリを削除する
空のファイルとディレクトリを削除するのは非常に簡単です。 Linux で空のフォルダーとファイルを検索するには、コマンドの最後に -delete フラグを追加するだけです。空のファイルとフォルダーを削除する構文は次のとおりです。
find <location> -type <search_item_type> -size 0 -delete






![2021 年に Raspberry Pi Web サーバーをセットアップする方法 [ガイド]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)





