ファイル検索の基本: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
試してみよう:
find . -name "*.js"
- .jsファイルを検索find project -type d
- ディレクトリのみ検索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
課題
- プロジェクト内のすべての.jsファイルを検索
- 空のディレクトリを検索
- .bakで終わるバックアップファイルを検索して削除
- 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
パフォーマンスの最適化
検索を高速化するコツ
- 検索範囲を限定する
# 悪い例:ルートから検索
find / -name "myfile.txt"
# 良い例:特定のディレクトリから
find ~/projects -name "myfile.txt"
- 深さを制限する
# 2階層まで
find . -maxdepth 2 -name "*.conf"
- 不要なディレクトリを除外
# node_modulesを除外
find . -path ./node_modules -prune -o -name "*.js" -print
まとめ
このレッスンでは、find
コマンドを中心にファイル検索の方法を学びました。適切な検索条件を組み合わせることで、必要なファイルを効率的に見つけることができます。
次のレッスンでは、プロセス管理について学びます。
💡 find
は非常に強力なコマンドです。まずは-name
と-type
から始めて、徐々に他のオプションも使いこなせるようになりましょう!