find
コマンドを使用して探す
使用例
sudo find / -name test.sh 2>/dev/null
サーバー全体から test.sh
を検索します。
/
: ルートディレクトリからすべて検索。-name
: 指定した名前のファイルを探す。2>/dev/null
: エラーメッセージ(アクセス権限のないディレクトリなど)を非表示にする。
find
コマンドは、Linux/Unix環境でファイルやディレクトリを検索するための強力なツールです。検索対象を名前、サイズ、更新時間、種類などの条件で絞り込むことができ、検索結果に対して様々な操作を行うことも可能です。
基本構文
find [検索開始ディレクトリ] [検索条件] [実行アクション]
- 検索開始ディレクトリ:
- 検索を開始するディレクトリを指定します。
/
(ルート)や.
(カレントディレクトリ)などが使用されます。
- 検索を開始するディレクトリを指定します。
- 検索条件:
- 名前、サイズ、更新日などで絞り込む条件を指定します。
- 実行アクション:
- 検索結果に対して特定の操作(例: 削除、表示など)を実行します。
よく使うオプション
1. 名前で検索(-name
)
指定した名前に一致するファイルまたはディレクトリを検索します。
find /path/to/search -name "filename"
部分一致の場合(ワイルドカード使用):
find /path/to/search -name "*.txt"
例: *.txt
は .txt
で終わるすべてのファイル。
大文字小文字を区別しない場合(-iname
):
find /path/to/search -iname "*.txt"
2. 種類で検索(-type
)
特定の種類(ファイル、ディレクトリなど)を指定して検索します。
find /path/to/search -type f # ファイルのみ
find /path/to/search -type d # ディレクトリのみ
- 主な種類:
f
: ファイルd
: ディレクトリl
: シンボリックリンク
3. サイズで検索(-size
)
ファイルサイズを条件に検索します。
find /path/to/search -size +10M # 10MBより大きいファイル
find /path/to/search -size -1G # 1GBより小さいファイル
- 単位:
k
: キロバイト(1024バイト)M
: メガバイトG
: ギガバイト
- 記号:
+
: 条件より大きい-
: 条件より小さい
4. 更新時間で検索(-mtime
/ -atime
/ -ctime
)
ファイルの更新日時やアクセス日時を条件に検索します。
-mtime
: 最終更新日からの日数
find /path/to/search -mtime -7 # 過去7日以内に更新されたファイル
find /path/to/search -mtime +30 # 30日以上前に更新されたファイル
-atime
: 最終アクセス日
find /path/to/search -atime -1 # 過去1日以内にアクセスされたファイル
-ctime
: ファイルの属性が変更された日
find /path/to/search -ctime +10 # 10日以上前に変更されたファイル
5. ユーザーで検索(-user
/ -group
)
特定の所有者またはグループに属するファイルを検索します。
find /path/to/search -user username
find /path/to/search -group groupname
6. パーミッションで検索(-perm
)
特定のパーミッションを持つファイルやディレクトリを検索します。
find /path/to/search -perm 644 # 正確に644のパーミッションを持つ
find /path/to/search -perm -755 # 少なくとも755のパーミッションを持つ
検索結果に対するアクション
1. 結果の表示(デフォルト動作)
特にアクションを指定しない場合、find
は結果を標準出力に表示します。
2. 削除(-delete
)
検索結果のファイルを削除します。
find /path/to/search -name "*.tmp" -delete
3. 他のコマンドと連携(-exec
)
検索結果に対して指定したコマンドを実行します。
例: ファイルの詳細を確認:
find /path/to/search -name "*.log" -exec ls -lh {} \;
{}
: 検索結果のファイルを指す。
\;
: コマンドの終了を表す。
例: ファイルを圧縮:
find /path/to/search -name "*.log" -exec gzip {} \;
よくある使い方の例
1. 特定の名前のファイルを検索
find / -name "test.sh"
2. 特定の拡張子のファイルを検索
find /var/log -name "*.log"
3. 1日以内に更新されたファイルを検索
find /home/user -mtime -1
4. サイズが1GB以上のファイルを検索
find / -size +1G
5. 特定のパーミッションを持つファイルを削除
find /tmp -perm 777 -delete
注意事項
権限エラーを無視:
すべてのファイルにアクセスできない場合、エラーを非表示にします。
find / -name "filename" 2>/dev/null
削除時の注意:
-delete
を使用する場合は、条件を慎重に確認してください。
まとめ
find
コマンドは、Linux/Unix環境で効率的にファイルやディレクトリを検索し、さらに操作まで行える便利なツールです。簡単な使い方から複雑な条件付き検索まで幅広く対応できるため、システム管理やデバッグ作業で頻繁に活用されます。
コメント