ファイルを探すとき、いつも ls -R | grep でやってる
find は覚えること多そうで避けてたんやけど、基本だけ知りたい
【疑問】find の -mtime +3 って「3日より前」ちゃうの?find の条件の読み方【LPICレベル1】
>>1
形は find 探し始める場所 条件 アクション。アクションを省略すると、見つかったパスを表示するfind /etc -name '*.conf' で、/etc の下を全部たどって、名前が .conf で終わるものを出す
>>2'*.conf' のクォートっているん?
>>3
いる。クォートしないと、find に渡る前にシェルが * を展開する
今いる場所に x.c があると、find . -name *.c は find . -name x.c になって、x.c しか見つからない
今いる場所にマッチするファイルがないときはそのまま渡るから、動いたり動かなかったりして気づきにくい
>>4
大文字と小文字は区別される?
>>5-name は区別する。B.C も拾いたいなら -iname
種類で絞るのは -type。f が普通のファイル、d がディレクトリ、l がシンボリックリンク
本題の -mtime。「3日より前に更新したファイル」を探したくて -mtime +3 にしたら、思ってたより少なかった
>>7-mtime は、最後に更新してからの時間を24時間単位で数えて、端数を切り捨てた日数で比べる
+3 は 、つまり 。4日(96時間)以上たったファイルだけ
>>8
ほな3日半前のファイルは入らんの
>>9
84時間なら やから、+3 には入らずに -mtime 3(ちょうど3)に入る
試したら、84時間前のファイルは -mtime 3、100時間前のファイルは -mtime +3 で出た
>>10-mtime -1 は?
>>11
、つまり で、24時間以内に更新したもの
分単位で見たいなら -mmin。-mmin -30 で30分以内
サイズで探すときは?
>>13-size +100M で100MiBより大きいもの。ただし単位をつけると、切り上げてから比べるから注意
500バイトのファイルは -size -1k に入らない。1KiB単位に切り上げると で、「 未満」ではないから
バイトで比べたいなら -size -1024c(c がバイト)にすると入る
権限で探す -perm の、数字の前にマイナスがついたりつかなかったりするのは何
>>15-perm 755 は、権限がぴったり のものだけ-perm -4000 は、指定したビットが全部立っているもの(ほかのビットは何でもいい)。SUID のついたファイル探しの定番-perm /111 は、指定したビットのどれか1つでも立っているもの。誰かが実行できるファイルが出る
見つけたファイルに何かしたいときは
>>17-exec。find . -name '*.log' -exec ls -l {} \; で、見つかったファイルごとに ls -l を1回ずつ動かす。{} がファイル名に置きかわる
最後を + にした -exec ls -l {} + は、まとめて1回の ls -l に渡すから速い
条件を2つ書いたらどうなるん
>>19
並べるだけなら AND(両方満たす)。OR は -o、否定は !find . \( -name '*.log' -o -name '*.tmp' \) -mtime +3 は「.log か .tmp で、かつ4日以上前」。かっこはシェルに解釈されないように \( と書く
下の階層まで行きすぎるなら、-maxdepth 2 で深さを制限できる
古いファイルを消すのに -delete を使おうと思ってる
>>21-delete は必ず条件のあとに書く。find は左から順に評価するからfind . -delete -name '*.tmp' と書くと、名前を見る前に全部消す。テスト用のディレクトリで試したら、残すつもりの keep.txt まで消えた
まず -delete なしで動かして、出てくる一覧を確かめてから付ける
-mtime は切り捨てた日数、-size は切り上げてから比べる。-perm はマイナスが「全部」でスラッシュが「どれか」
クォートと -delete の位置は事故のもとやから気をつける
管理人のひとこと
- 形は
find 起点 条件 アクション。-nameのパターンはクォートしないとシェルに展開される。-inameは大文字小文字を区別しない。-typeは f・d・l で種類を絞る。 -mtime nは経過時間を24時間で割って切り捨てた日数で比べる。+3は4日以上前、-1は24時間以内。分単位は-mmin。-sizeは単位に切り上げてから比べる(500バイトは-size -1kに入らない)。-perm 755は完全一致、-perm -4000は全部立っている、-perm /111はどれかが立っている。-exec ... {} \;は1件ずつ、{} +はまとめて実行。条件は並べると AND、-oで OR、!で否定。-deleteは条件より後ろに書く。前に書くと全部消える。まず-deleteなしで一覧を確かめる。