ファイル操作

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マッチしたファイルを削除
-lsls -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 との組み合わせ

ファイル名にスペースがある場合は -print0xargs -0 を組み合わせると安全。

find . -name "*.log" -print0 | xargs -0 rm