- ベストアンサー
シェルで12時間前のファイルを消す方法
こんにちは。UNIX(HP-UX)のPOSIXシェルで質問です。 指定したフォルダの中の「現在時刻より12時間前のタイムスタンプのファイルを消す」方法はないでしょうか? findコマンドは24時間の倍数しか検索できないので、12時間前は指定できません。 12時間以上前のファイルは、すべて消えてかまいません。(例えば15時間前のファイルなど) できれば抽象的な説明ではなく、具体的で、すぐに動くコーディングを記述して下さると助かります。 以上宜しくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
あんまり綺麗じゃないけど、、 1.12時間前のタイムスタンプを持つファイルを作成 2.そのファイルより古いものを消す という手を使うと DATE=`date -d '12 hours ago' +%m%d%H%M%y` echo >temp.file touch $DATE temp.file find <dir> !-newer temp.file -print | xargs rm rm temp.file みたいなスクリプトでできるかも知れません。 (実際に試したわけではないのですが) (findでexecを使わないのは、、個人的な趣味(execだとファイル毎にプロセスを起動する、シェルによっては{}をエスケープする必要があったような、)です、、。) ~
その他の回答 (4)
//-----------timechecker.c #include <stdio.h> #include <time.h> #include <sys/types.h> #include <sys/stat.h> void main (int argc,char *argv[]) { struct stat buf; int s,a=0; time_t t,d; s = stat(argv[argc-1],&buf); t = time(&t); d = t - buf.st_mtime; printf("%d",(d > (3600*12))); } //----------- $ gcc timechecker.c -o timechecker.bin ## 変更時間が現在より12時間以上古いと1。以内なら0が出力される ## パラメータに何も渡さないとbin本体 沢山渡しても最後のファイルのみしか見ない ## エラーチェック無し
お礼
ご回答有難うございました。感謝いたします。
- qaz_qwerty_me
- ベストアンサー率19% (214/1115)
#2さんの改良? シンプル版で・・ # find <dir> -mmin +720 -exec rm {} \; -exec オプションはコマンドを実行できるので、パイプラインで次のコマンドで処理しないで済みます。
お礼
ご回答有難うございました。感謝いたします。
補足
ご回答有難うございました。感謝いたします。
- foobar
- ベストアンサー率44% (1423/3185)
findで24時間単位で指定するmtimeではなくて、分単位で指定するmminが使えれば、 find <dir> -mmin +720 -print | xargs rm というような事ができるかと思います。
お礼
ご回答有難うございました。感謝いたします。
補足
1、-mminは使用できませんでした。 2、POSIXシェルなのでperlも使いません。 上記2点を踏まえて、さらに方法をご存知の方は 宜しくお願い致します。
#! /bin/perl # 指定したファイル情報の時間が今より12時間以内なら偽(0) # 指定したファイル情報の時間が今より12時間超過なら真(1) # 未検証 # finfo[8] は最終アクセス時間 # finfo[9] だと最終更新日…らしい @finfo = stat $ARGV[0]; if (($finfo[8] - time) <= (12*60*60)) { return 0; } 1;
お礼
ご回答有難うございました。感謝いたします。
お礼
ご回答有難うございました。感謝いたします。