- ベストアンサー
3日以上前7日未満以内に修正されたファイルを探すには?
宜しくお願い致します。 RedHat9を使用しています。24時間いないに修正されたファイルを見つけ出す場合には、 # find -mtime -1 として上手くいきました。 それで、 3日以上前7日未満以内 に修正されたファイルを見つけ出すにはどうすればいいんでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> >> # find /etc -type f -mtime +2 -mtime -4 | ls -l > > 「ls」コマンドは標準入力を受け付けるように作られていないので、 > > # ls -l > > と同じ出力結果になりませんか? > # find /etc -type f -mtime +2 -mtime -4 | ls -l > と > # ls -l /etc > とでは違う結果になりました。 > 後者は沢山のファイル・ディレクトリが表示されました。 私は前回の回答で、 # find /etc -type f -mtime +2 -mtime -4 | ls -l と # ls -l が同じ結果になると言っています。 # ls -l /etc では結果が異なるでしょう。(カレントディレクトリが/etcである場合を除いて、、、。) > 所で、 > # find /etc -type f -mtime +7 -mtime -8 -exec ls -lF \{\} \ ... より正確にいうと、 「-mtime +7」は、更新日付が7日を越えるという(つまり8日0時0分0秒以上)条件を、 「-mtime -8」は、更新日付が8日を下回るという(つまり7日23時59分59秒以下)条件を、 表します。 したがって、条件が矛盾しているため「-mtime +7」かつ「-mtime -8」という 条件のファイルはあり得ません。 # find /etc -type f -mtime +7 -exec ls -lF \{\} \; # find /etc -type f -mtime +8 -exec ls -lF \{\} \; # find /etc -type f -mtime +9 -exec ls -lF \{\} \; # find /etc -type f -mtime -7 -exec ls -lF \{\} \; # find /etc -type f -mtime -8 -exec ls -lF \{\} \; # find /etc -type f -mtime -9 -exec ls -lF \{\} \; 等といろいろ条件を変えて試してみることをお勧めします。 くどい説明になるかもしれませんが、 # find /etc -type f -mtime +7 -mtime -8 -exec ls -lF \{\} \; は # find /etc -type f -mtime +7 -exec ls -lF \{\} \; と # find /etc -type f -mtime -8 -exec ls -lF \{\} \; とのAND条件での検索に過ぎません。
その他の回答 (3)
- shuyamakawa
- ベストアンサー率67% (111/164)
> # find /etc -type f -mtime +2 -mtime -4 | ls -l 「ls」コマンドは標準入力を受け付けるように作られていないので、 # ls -l と同じ出力結果になりませんか? (少なくとも「Red hat Linux AS 2.1」や「FreeBSD 4.10-RELEASE」 ではそうです。) # find /etc -type f -mtime +2 -mtime -4 -exec ls -l \{\} \; で試してみてください。
補足
有難うございます。 >> # find /etc -type f -mtime +2 -mtime -4 | ls -l > 「ls」コマンドは標準入力を受け付けるように作られていないので、 > # ls -l > と同じ出力結果になりませんか? # find /etc -type f -mtime +2 -mtime -4 | ls -l と # ls -l /etc とでは違う結果になりました。 後者は沢山のファイル・ディレクトリが表示されました。 > # find /etc -type f -mtime +2 -mtime -4 -exec ls -l \{\} \; > で試してみてください。 これで上手くいました。 所で、 # find /etc -type f -mtime +7 -mtime -8 -exec ls -lF \{\} \ ↑七日以上前、八日未満; # find /etc -type f -mtime +8 -mtime -9 -exec ls -lF \{\} \; ↑八日以上前、九日未満 # find /etc -type f -mtime +7 -mtime -9 -exec ls -lF \{\} \; -rw-r--r-- 3 root root 39 12月 12 08:39 /etc/sysconfig/networking/profiles/default/resolv.conf -rw-r--r-- 1 root root 3225 12月 12 08:37 /etc/sysconfig/hwconf -rw-r--r-- 1 root root 635 12月 12 08:39 /etc/mtab -rw-r--r-- 1 root root 46 12月 12 08:33 /etc/adjtime -rw-r--r-- 1 root root 35031 12月 11 13:15 /etc/httpd/conf/httpd.conf : ↑七日以上前、九日未満 という結果になりました。一番目、二番目のコマンドは出力無しなのに三番目は沢山出力されました。 この結果はおかしくありませんか。
- shuyamakawa
- ベストアンサー率67% (111/164)
間違って、動作確認でちょっと変更したものをのせてしまいました。 正しくは、 find /dir -type f -mtime +3 -mtime -7 です。 findの表示条件を普通に並べて書くとAND条件になります。 なので上の例は、 3日以上前に修正され(-mtime +3)、 かつ、7日未満のうちに修正された(-mtime -7) かつ、ファイル(-type f) (ディレクトリ等でないという意味です。) という条件となります。
補足
有難うございます。 早速、ご紹介いただいた方法で試してみました。 # date 2004年 12月 20日 月曜日 04:02:32 JST # find /etc -type f -mtime +2 -mtime -4 | ls -l 合計 108 lrwxrwxrwx 1 root root 37 2月 29 2004 Makefile -> ../../../usr/share/ssl/certs/Makefile -rw-r--r-- 1 root root 35031 12月 11 13:15 httpd.conf -rw-r--r-- 1 root root 35038 12月 11 13:15 httpd.conf~ -rw-r--r-- 1 root root 12959 11月 28 2003 magic drwx------ 2 root root 4096 2月 29 2004 ssl.crl/ drwx------ 2 root root 4096 12月 16 14:34 ssl.crt/ drwx------ 2 root root 4096 11月 28 2003 ssl.csr/ drwx------ 2 root root 4096 12月 16 14:17 ssl.key/ drwx------ 2 root root 4096 11月 28 2003 ssl.prm/ となりました。 上記は"2日以上前、4日未満経過のファイルを/etcから検索"という意味ですよね。 12月17日、12月18日のタイムスタンプのファイルがヒットすると予想したのですが予想外でした。 何か勘違いしてますでしょうか?
- shuyamakawa
- ベストアンサー率67% (111/164)
find /dir -type f -mtime +7 -mtime -30 でどうでしょうか?
補足
有難うございます。 > find /dir -type f -mtime +7 -mtime -30 manを見ているのですが 「-mtime +7 -mtime -30」はこれはどう解釈すればいいのでしょうか? 30日以上前、7日以上後 という意味なんですかね。 お手数お掛けしてして申し訳有りません。
お礼
ありがとうございます。 find /etc -type f -mtime +n は 『(現在時刻)-(タイムスタンプ) < 24n×3600』(単位は秒) を満たすタイムスタンプのファイル。 find /etc -type f -mtime-n は 『(現在時刻)-(タイムスタンプ) > 24(n+1)×3600』(単位は秒) を満たすタイムスタンプのファイル。 find /etc -type f -mtime n は 『24n×3600 ≦ (現在時刻)-(タイムスタンプ) ≦ 24n×3600』(単位は秒) を満たすタイムスタンプのファイル。 なのですね。という事は、 find /etc -type f -mtime +7 -mtime -8 は現在時刻から 「(7×24=)168時間経過してない」 且つ 「((8+1)×24=)216時間を超えて経過している(つまり、216時間より前に更新され た)」 という意味なのですね。 実際に何もヒットしませんでした。 そんな矛盾したタイムスタンプを持ったファイルは存在し得ないからアタリマエなのですね。
補足
有難うございます。 > 私は前回の回答で、 > # find /etc -type f -mtime +2 -mtime -4 | ls -l > と > # ls -l > が同じ結果になると言っています。 そういう意味だったのですね。勘違いしてしまいまして、大変失礼致しました。 >> 所で、 >> # find /etc -type f -mtime +7 -mtime -8 -exec ls -lF \{\} \ > より正確にいうと、 > 「-mtime +7」は、更新日付が7日を越えるという(つまり8日0時0分0秒以上)条件を、 7以上日間経過かつ8以内日間経過ですよね。 有難うございます。色々と幾度と試して見ました。 > # find /etc -type f -mtime +7 -exec ls -lF \{\} \; 現在を2004/12/21/12:44:33だとすると 2004/12/14/12:44:33以前 > # find /etc -type f -mtime +8 -exec ls -lF \{\} \; 2004/12/13/12:44:33以前 > # find /etc -type f -mtime +9 -exec ls -lF \{\} \; 2004/12/12/12:44:33以前 > # find /etc -type f -mtime -7 -exec ls -lF \{\} \; 2004/12/14/12:44:33から2004/12/21/12:44:33まで > # find /etc -type f -mtime -8 -exec ls -lF \{\} \; 2004/12/13/12:44:33から2004/12/21/12:44:33まで > # find /etc -type f -mtime -9 -exec ls -lF \{\} \; 2004/12/12/12:44:33から2004/12/21/12:44:33まで という事ですよね。 > くどい説明になるかもしれませんが、 > # find /etc -type f -mtime +7 -mtime -8 -exec ls -lF \{\} \; > は > # find /etc -type f -mtime +7 -exec ls -lF \{\} \; > と > # find /etc -type f -mtime -8 -exec ls -lF \{\} \; > とのAND条件での検索に過ぎません。 AND条件ですよね。としますと 「2004/12/14/12:44:33以前(現在から7日以上経過したもの)」 かつ 「2004/12/13/12:44:33から(現在)2004/12/21/12:44:33まで」 という事ですよね。で、AND条件だから 2004/12/13/12:44:33~2004/12/14/12:44:33 のタイムスタンプのものがヒットすると思ったのですが勘違いしてますでしょうか? お手数お掛けして誠に申し訳有りません。m(_ _)m