2008年12月8日月曜日

[Linux] find

findコマンドはファイルやディレクトリを再帰的に検索してくれます。


[主なオプション]
-name ファイル名及びディレクトリ名にマッチするものを表示
-iname -nameと同じだが、大文字小文字を区別しない
-regex ファイル名が正規表現にマッチするものを表示
-iregex regexと同じだが、大文字小文字を区別しない
-type ファイルタイプを指定。タイプにはd(ディレクトリ)、f(ファイル)、l(シンボリックリンク)を指定
-emtpy ファイルが0byteもしくは中身のないディレクトリを表示
-size ファイルのサイズで検索。通常kオプションをつけてキロバイトにて指定


[使用例]

#空のファイルを削除
find . -empty -exec rm {}\; #ユーザ確認を求めない
find . -empty -ok rm {}\; #ユーザ確認を求める


※{}にはfindで引っかかったファイル名が引数として渡ります


#ファイルの数を調べる
find . -type f |wc -l


#findで見つかったファイルの中身をgrepする
find ./ -type f -exec grep https://www.ksknet.net {} \;


#ディレクトリ以下を再帰的に置換
sudo find . -type f -exec sed -i 's/置換前/置換後/g' {} \;


#1000kを越えるファイルを検索
find ./ -size +1000k


#ファイル所有者がtomのユーザを検索
find ./ -user tom


#ファイル名がhtmlもしくはcgiで終わるファイルを表示
find ./ -type f -iregex ".*\.html$" -or -iregex ".*\.cgi$"


#ファイル属性による検索(アクセス権限による検索)
find ./ -perm 755


#日付による検索
find ./ -daystart -ctime +2


補足 +2 と -2 では動作が異なります。+2では2日前より古いファイル、-2では2日前より新しいファイルを返します。
-ctime の他に -mtime -atime などがあります。


#日付による検索その2 (30日前より以前に作成されたファイルを削除)
find ./ -ctime +30 -type f -exec rm -f {} \;


[補足]
findは基本的にand検索をします。OR検索の場合は-oオプションを使用すること。
-------------------
http://www.ksknet.net/linuxai/find.html

0 件のコメント: