メインコンテンツへスキップ
レッスン 7 / 10推定時間: 25

ファイルの検索

findコマンドを使って、様々な条件でファイルやディレクトリを検索する方法を学びます

このレッスンの学習目標

  • findコマンドの基本的な使い方を理解する
  • 名前、サイズ、更新日時などでファイルを検索できる
  • 検索結果に対してアクションを実行できる
  • 効率的な検索方法を身につける

ファイル検索の基本:find

findは、ファイルシステム内で条件に合うファイルやディレクトリを検索する強力なコマンドです。

基本的な検索

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

試してみよう:

  1. find . -name "*.js" - .jsファイルを検索
  2. find project -type d - ディレクトリのみ検索
  3. find . -name "README*" - READMEで始まるファイル

findの基本構文

find [検索開始ディレクトリ] [検索条件] [アクション]

名前による検索

ファイル名のパターン検索

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

名前による検索オプション:

  • -name: 大文字小文字を区別
  • -iname: 大文字小文字を区別しない
  • ワイルドカードが使用可能(*, ?, [])

よく使う名前検索の例

# 特定の拡張子
find . -name "*.pdf"

# 複数の拡張子
find . -name "*.jpg" -o -name "*.png"

# 隠しファイル
find . -name ".*"

# 特定のパターンを除外
find . -name "*.txt" -not -name "temp*"

ファイルタイプによる検索

タイプ説明
f通常ファイルfind . -type f
dディレクトリfind . -type d
lシンボリックリンクfind . -type l
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

サイズによる検索

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

サイズ指定の単位:

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

例:

  • find . -size +10M - 10MB以上
  • find . -size -1k - 1KB未満
  • find . -size 100c - ちょうど100バイト

時間による検索

更新時刻での検索

# 7日以内に変更されたファイル
find . -mtime -7

# 30日以上前に変更されたファイル
find . -mtime +30

# ちょうど1日前に変更されたファイル
find . -mtime 1

時間指定のオプション

オプション説明
-mtime変更時刻(日単位)
-atimeアクセス時刻(日単位)
-ctime作成時刻(日単位)
-mmin変更時刻(分単位)
-newer指定ファイルより新しい

検索結果に対するアクション

-execオプション

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

-execの最後には必ず\;が必要です:

find . -name "*.old" -exec ls -l {} \;

{}は見つかったファイル名に置換されます。

よく使うアクションの例

# 検索結果を削除(注意!)
find . -name "*.tmp" -delete

# 検索結果のパーミッションを変更
find . -type f -name "*.sh" -exec chmod +x {} \;

# 検索結果をコピー
find . -name "*.conf" -exec cp {} {}.backup \;

# 検索結果の詳細情報を表示
find . -mtime -1 -ls

その他の検索コマンド

locate - 高速検索

locateは、事前に作成されたデータベースを使って高速にファイルを検索します。

# データベースを更新(通常は自動実行)
sudo updatedb

# ファイルを検索
locate filename

# 大文字小文字を区別しない
locate -i filename

which - コマンドの場所

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

whichはPATH内のコマンドの場所を表示:

  • which ls - lsコマンドの場所
  • which python - pythonの場所
  • which -a python - すべての場所を表示

whereis - バイナリ、ソース、マニュアルの場所

# lsコマンドの関連ファイル
whereis ls

# バイナリのみ
whereis -b gcc

# マニュアルのみ
whereis -m bash

実践演習

以下の演習に挑戦してみましょう:

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

課題

  1. プロジェクト内のすべての.jsファイルを検索
  2. 空のディレクトリを検索
  3. .bakで終わるバックアップファイルを検索して削除
  4. docsディレクトリ内のMarkdownファイルの数をカウント

解答例:

# 1. .jsファイルを検索
find project -name "*.js"

# 2. 空のディレクトリ
find project -type d -empty

# 3. バックアップファイルを削除
find project -name "*.bak" -delete

# 4. Markdownファイルをカウント
find project/docs -name "*.md" | wc -l

高度な検索テクニック

複数条件の組み合わせ

# AND条件(デフォルト)
find . -name "*.log" -size +1M

# OR条件
find . \( -name "*.jpg" -o -name "*.png" \) -size +100k

# NOT条件
find . -not -name "*.tmp"

パーミッションによる検索

# 実行可能ファイル
find . -perm -111

# 特定のパーミッション
find . -perm 644

# 書き込み可能なディレクトリ
find . -type d -perm -222

パフォーマンスの最適化

検索を高速化するコツ

  1. 検索範囲を限定する
# 悪い例:ルートから検索
find / -name "myfile.txt"

# 良い例:特定のディレクトリから
find ~/projects -name "myfile.txt"
  1. 深さを制限する
# 2階層まで
find . -maxdepth 2 -name "*.conf"
  1. 不要なディレクトリを除外
# node_modulesを除外
find . -path ./node_modules -prune -o -name "*.js" -print

まとめ

このレッスンでは、findコマンドを中心にファイル検索の方法を学びました。適切な検索条件を組み合わせることで、必要なファイルを効率的に見つけることができます。

次のレッスンでは、プロセス管理について学びます。

💡 findは非常に強力なコマンドです。まずは-name-typeから始めて、徐々に他のオプションも使いこなせるようになりましょう!

さらに学習を続けるには

素晴らしい学習ペースです!次のレッスンに進むには、無料会員登録をお願いします。無料会員では各コース3レッスンまで学習できます。

無料で続きを学ぶ

各コース3レッスンまで学習可能

学習進捗の自動保存

コース修了証明書の発行