Linux ファイル検索

LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、強力な find コマンドを使用して Linux システム内で効果的にファイルを検索する方法を学びます。find コマンドは、名前、サイズ、変更時間などの様々な基準に基づいてファイルやディレクトリを検索できる汎用的なツールです。

この実験の終了時には、以下のことができるようになります。

  • find コマンドの基本構文を使用する
  • 特定の名前でファイルを検索する
  • ファイルのサイズに基づいてファイルを検索する
  • 複数の検索条件を組み合わせる

これらのスキルは、システム管理者、開発者、および Linux システムで作業し、ファイルシステム内で効率的にファイルを見つける必要のあるすべての人にとって不可欠です。

find コマンドの基本を探索する

find コマンドは、Linux でファイルやディレクトリを指定された場所内で検索するのに役立つ強力なツールです。find コマンドの基本構文は次の通りです。

find [starting-point] [options] [expression]

ここで:

  • [starting-point]find が検索を開始するディレクトリです。
  • [options] は検索の実行方法を制御します。
  • [expression] はファイルを選択するための基準を定義します。

練習用のディレクトリ構造を作成しましょう。ターミナルを開き、次のコマンドを実行します。

mkdir -p ~/project/files/{documents,images,music}
touch ~/project/files/documents/{report.txt,notes.txt,project.pdf}
touch ~/project/files/images/{photo1.jpg,photo2.jpg,diagram.png}
touch ~/project/files/music/{song1.mp3,song2.mp3}

これらのコマンドは、いくつかのサブディレクトリとさまざまな種類のファイルを含むディレクトリ構造を作成します。

では、find コマンドを使用して files ディレクトリ内のすべてのファイルをリストアップしましょう。

find ~/project/files -type f

次のような出力が表示されるはずです。

/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt
/home/labex/project/files/documents/project.pdf
/home/labex/project/files/images/photo1.jpg
/home/labex/project/files/images/photo2.jpg
/home/labex/project/files/images/diagram.png
/home/labex/project/files/music/song1.mp3
/home/labex/project/files/music/song2.mp3

このコマンドでは:

  • ~/project/files は検索を開始する場所を指定します。
  • -type ffind にファイル(ディレクトリではない)のみを検索するよう指示します。

また、find を使用してディレクトリのみをリストアップすることもできます。

find ~/project/files -type d

これにより、次のように表示されます。

/home/labex/project/files
/home/labex/project/files/documents
/home/labex/project/files/images
/home/labex/project/files/music

-type d オプションは find にディレクトリのみを検索するよう指示します。

名前でファイルを検索する

find コマンドの最も一般的な用途の 1 つは、ファイル名でファイルを検索することです。-name オプションを使用すると、ファイル名に一致させるパターンを指定できます。

たとえば、files ディレクトリ内のすべてのテキストファイルを検索したいとしましょう。次のように使用できます。

find ~/project/files -type f -name "*.txt"

このコマンドは、次の結果を返すはずです。

/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt

このコマンドでは:

  • -name "*.txt"find.txt で終わるファイル名を一致させるよう指示します。
  • * は任意の数の文字に一致するワイルドカードです。

-name オプションは大文字と小文字を区別します。大文字小文字を区別せずにファイルを検索したい場合は、代わりに -iname を使用します。

find ~/project/files -type f -iname "*.TXT"

これにより、拡張子を大文字で指定しても、report.txtnotes.txt が見つかります。

では、特定のファイルを検索してみましょう。一意の名前の新しいファイルを作成します。

touch ~/project/files/documents/important_report.txt

この特定のファイルを検索するには:

find ~/project/files -type f -name "important_report.txt"

出力:

/home/labex/project/files/documents/important_report.txt

特定のサブディレクトリ内でも検索できます。たとえば、images ディレクトリ内のみを検索するには:

find ~/project/files/images -type f -name "*.jpg"

出力:

/home/labex/project/files/images/photo1.jpg
/home/labex/project/files/images/photo2.jpg

このコマンドは、images ディレクトリ内のみを検索し、.jpg 拡張子のファイルを探します。

サイズでファイルを検索する

find コマンドは、-size オプションを使用してファイルのサイズに基づいて検索することもできます。これは、ディスク容量を占有している大きなファイルや、空の可能性のある小さなファイルを見つける必要がある場合に便利です。

まず、-size オプションの構文を理解しましょう。

-size n[cwbkMG]

ここで:

  • n は数値です。
  • 文字は単位を表します。c(バイト)、w(2 バイトワード)、b(512 バイトブロック)、k(キロバイト)、M(メガバイト)、G(ギガバイト)
  • n の前に + を付けると「n より大きい」を意味し、- を付けると「n より小さい」を意味します。

さまざまなサイズのファイルを作成するために、いくつかの内容をファイルに追加しましょう。

echo "This is a short text file." > ~/project/files/documents/notes.txt
for i in {1..100}; do
  echo "This is line $i of the important report." >> ~/project/files/documents/important_report.txt
done

では、100 バイト未満のファイルを検索しましょう。

find ~/project/files -type f -size -100c

これには、空またはほぼ空のファイルが含まれる可能性があります。

1 キロバイトより大きいファイルを検索するには:

find ~/project/files -type f -size +1k

これには、100 行を追加した important_report.txt ファイルが含まれるはずです。

また、正確なサイズを指定することもできます。正確に 50 バイトのファイルを作成しましょう。

echo -n "This is exactly 50 bytes long........................." > ~/project/files/documents/exact_size.txt

では、正確に 50 バイトのファイルを検索しましょう。

find ~/project/files -type f -size 50c

出力:

/home/labex/project/files/documents/exact_size.txt

ファイルのサイズを確認するには、ls -l コマンドを使用できます。

ls -l ~/project/files/documents/exact_size.txt

出力の 2 番目の列には、バイト単位のファイルサイズが表示され、これは 50 であるはずです。

複数の検索条件を組み合わせる

find コマンドは、複数の検索条件を組み合わせるとさらに強力になります。論理演算子を使用して、複雑な検索パターンを作成することができます。

AND 論理の使用

デフォルトでは、複数の条件を指定すると、find は AND 論理を使用します。つまり、すべての条件が真である必要があります。たとえば、100 バイトより大きいすべてのテキストファイルを検索するには:

find ~/project/files -type f -name "*.txt" -size +100c

このコマンドは、テキストファイルであり、かつ 100 バイトより大きいファイルを検索します。

-o を使用した OR 論理の使用

OR 論理を使用するには、-o オプションを使用できます。たとえば、テキストファイルまたは PDF ファイルを検索するには:

find ~/project/files -type f \( -name "*.txt" -o -name "*.pdf" \)

括弧の使用に注意してください。括弧はバックスラッシュでエスケープする必要があります。このコマンドは、いずれかの条件に一致するファイルを検索します。

出力には以下が含まれるはずです:

/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt
/home/labex/project/files/documents/important_report.txt
/home/labex/project/files/documents/exact_size.txt
/home/labex/project/files/documents/project.pdf

! を使用した NOT 論理の使用

条件を否定するには、! 演算子を使用します。たとえば、テキストファイルではないすべてのファイルを検索するには:

find ~/project/files -type f ! -name "*.txt"

このコマンドは、.txt 拡張子を持たないすべてのファイルを検索します。

複雑な例

もう少し複雑な組み合わせを試してみましょう。たとえば、以下の条件を満たすすべてのファイルを検索するには:

  • JPG または PNG 画像であり、かつ
  • 0 バイトより大きい
find ~/project/files -type f \( -name "*.jpg" -o -name "*.png" \) -size +0c

documents ディレクトリ内の PDF ファイルではないすべてのファイルを検索するには:

find ~/project/files/documents -type f ! -name "*.pdf"

より複雑な検索を実証するために、いくつかの追加ファイルを作成しましょう。

## Create some large and small image files
echo "This is a large JPG file" > ~/project/files/images/large_image.jpg
for i in {1..50}; do
  echo "Adding content to make this file larger." >> ~/project/files/images/large_image.jpg
done

touch ~/project/files/images/empty_image.png

では、空または 1KB より大きいすべての画像ファイル(JPG または PNG)を検索しましょう。

find ~/project/files/images -type f \( -name "*.jpg" -o -name "*.png" \) \( -size 0 -o -size +1k \)

この複雑なコマンドは、論理演算子を使用して複数の条件を組み合わせることで、高度な検索条件を作成できることを示しています。

まとめ

この実験では、Linux の find コマンドを使用して、さまざまな条件に基づいて効率的にファイルを検索する方法を学びました。以下に、達成したことをまとめます。

  1. find コマンドの基本構文と、ファイルやディレクトリを検索する方法を学びました。
  2. -name オプションとワイルドカードを使用して、名前でファイルを検索する方法を発見しました。
  3. -size オプションを異なる単位で使用して、サイズに基づいてファイルを検索する方法を調べました。
  4. 論理演算子(AND、OR、NOT)を使用して複数の検索条件を組み合わせ、複雑な検索を実行する方法を学びました。

find コマンドは、Linux でファイルを見つけるために利用できる最も強力で柔軟なツールの 1 つです。Linux システムで作業を続けるうちに、これらのスキルがファイル管理、問題解決、タスク自動化に非常に役立つことがわかるでしょう。

覚えておくべきポイント:

  • ファイルには -type f を、ディレクトリには -type d を使用します。
  • 大文字小文字を区別するファイル名検索には -name を、区別しない検索には -iname を使用します。
  • サイズでファイルを検索するには、適切な単位(c、k、M、G)で -size を使用します。
  • 論理演算子で条件を組み合わせて、複雑な検索パターンを作成します。

これらのスキルは、あらゆる Linux 環境で効率的にファイルを操作し管理するのに役立ちます。