ファイル操作
find
ファイルシステムを再帰的に検索してファイルを探す。条件の組み合わせが強力
SYNTAX
find [path...] [expression] 主な検索条件
| 条件 | 説明 |
|---|---|
-name <pattern> | ファイル名でマッチ(大文字小文字を区別) |
-iname <pattern> | ファイル名でマッチ(大文字小文字を区別しない) |
-type f | 通常ファイルのみ |
-type d | ディレクトリのみ |
-type l | シンボリックリンクのみ |
-size <n> | ファイルサイズ(+10M=10MB超、-1k=1KB未満) |
-mtime <n> | 更新日時(-7=7日以内、+30=30日以上前) |
-newer <file> | 指定ファイルより新しい |
-perm <mode> | パーミッションでマッチ |
-user <name> | 所有ユーザーでマッチ |
-empty | 空のファイル・ディレクトリ |
主なアクション
| アクション | 説明 |
|---|---|
-print | パスを表示(デフォルト) |
-exec <cmd> {} \; | マッチしたファイルにコマンドを実行 |
-exec <cmd> {} + | まとめて渡して実行(高速) |
-delete | マッチしたファイルを削除 |
-ls | ls -l 形式で詳細表示 |
使用例
# カレントディレクトリ以下の .log ファイルを検索
find . -name "*.log"
# /var/log 以下の .log ファイル(大文字小文字を区別しない)
find /var/log -iname "*.log"
# ディレクトリのみ検索
find . -type d
# 7日以内に更新されたファイルを検索
find . -type f -mtime -7
# 10MB 以上のファイルを検索
find / -type f -size +10M 2>/dev/null
# 検索結果に対して ls -l を実行
find . -name "*.conf" -exec ls -l {} \;
# 検索結果をまとめて grep に渡す
find . -name "*.py" -exec grep -l "TODO" {} +
# 30日以上前の .tmp ファイルを削除
find /tmp -name "*.tmp" -mtime +30 -delete
# パーミッション 777 のファイルを検索(セキュリティ確認)
find . -type f -perm 777
条件の組み合わせ
# AND(デフォルト):.txt かつ 1MB 以上
find . -name "*.txt" -size +1M
# OR:.jpg または .png
find . -name "*.jpg" -o -name "*.png"
# NOT:.git 以下を除外
find . -not -path "./.git/*" -name "*.py"
xargs との組み合わせ
ファイル名にスペースがある場合は -print0 と xargs -0 を組み合わせると安全。
find . -name "*.log" -print0 | xargs -0 rm