読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】find の -mtime +3 って「3日より前」ちゃうの?find の条件の読み方【LPICレベル1】

23レスカテゴリ:Linux
1: 名無しさん

ファイルを探すとき、いつも ls -R | grep でやってる
find は覚えること多そうで避けてたんやけど、基本だけ知りたい

2: 名無しさん

>>1
形は find 探し始める場所 条件 アクション。アクションを省略すると、見つかったパスを表示する
find /etc -name '*.conf' で、/etc の下を全部たどって、名前が .conf で終わるものを出す

3: 名無しさん

>>2
'*.conf' のクォートっているん?

4: 名無しさん

>>3
いる。クォートしないと、find に渡る前にシェルが * を展開する
今いる場所に x.c があると、find . -name *.c は find . -name x.c になって、x.c しか見つからない
今いる場所にマッチするファイルがないときはそのまま渡るから、動いたり動かなかったりして気づきにくい

5: 名無しさん

>>4
大文字と小文字は区別される?

6: 名無しさん

>>5
-name は区別する。B.C も拾いたいなら -iname
種類で絞るのは -type。f が普通のファイル、d がディレクトリ、l がシンボリックリンク

7: 名無しさん

本題の -mtime。「3日より前に更新したファイル」を探したくて -mtime +3 にしたら、思ってたより少なかった

8: 名無しさん

>>7
-mtime は、最後に更新してからの時間を24時間単位で数えて、端数を切り捨てた日数で比べる

+3 は 、つまり 。4日(96時間)以上たったファイルだけ

9: 名無しさん

>>8
ほな3日半前のファイルは入らんの

10: 名無しさん

>>9
84時間なら やから、+3 には入らずに -mtime 3(ちょうど3)に入る
試したら、84時間前のファイルは -mtime 3、100時間前のファイルは -mtime +3 で出た

11: 名無しさん

>>10
-mtime -1 は?

12: 名無しさん

>>11
、つまり で、24時間以内に更新したもの
分単位で見たいなら -mmin。-mmin -30 で30分以内

13: 名無しさん

サイズで探すときは?

14: 名無しさん

>>13
-size +100M で100MiBより大きいもの。ただし単位をつけると、切り上げてから比べるから注意
500バイトのファイルは -size -1k に入らない。1KiB単位に切り上げると で、「 未満」ではないから
バイトで比べたいなら -size -1024c(c がバイト)にすると入る

15: 名無しさん

権限で探す -perm の、数字の前にマイナスがついたりつかなかったりするのは何

16: 名無しさん

>>15
-perm 755 は、権限がぴったり のものだけ
-perm -4000 は、指定したビットが全部立っているもの(ほかのビットは何でもいい)。SUID のついたファイル探しの定番
-perm /111 は、指定したビットのどれか1つでも立っているもの。誰かが実行できるファイルが出る

17: 名無しさん

見つけたファイルに何かしたいときは

18: 名無しさん

>>17
-exec。find . -name '*.log' -exec ls -l {} \; で、見つかったファイルごとに ls -l を1回ずつ動かす。{} がファイル名に置きかわる
最後を + にした -exec ls -l {} + は、まとめて1回の ls -l に渡すから速い

19: 名無しさん

条件を2つ書いたらどうなるん

20: 名無しさん

>>19
並べるだけなら AND(両方満たす)。OR は -o、否定は !
find . \( -name '*.log' -o -name '*.tmp' \) -mtime +3 は「.log か .tmp で、かつ4日以上前」。かっこはシェルに解釈されないように \( と書く
下の階層まで行きすぎるなら、-maxdepth 2 で深さを制限できる

21: 名無しさん

古いファイルを消すのに -delete を使おうと思ってる

22: 名無しさん

>>21
-delete は必ず条件のあとに書く。find は左から順に評価するから
find . -delete -name '*.tmp' と書くと、名前を見る前に全部消す。テスト用のディレクトリで試したら、残すつもりの keep.txt まで消えた
まず -delete なしで動かして、出てくる一覧を確かめてから付ける

23: 名無しさん

-mtime は切り捨てた日数、-size は切り上げてから比べる。-perm はマイナスが「全部」でスラッシュが「どれか」
クォートと -delete の位置は事故のもとやから気をつける

管理人のひとこと