• ベストアンサー

シェルで12時間前のファイルを消す方法

こんにちは。UNIX(HP-UX)のPOSIXシェルで質問です。 指定したフォルダの中の「現在時刻より12時間前のタイムスタンプのファイルを消す」方法はないでしょうか? findコマンドは24時間の倍数しか検索できないので、12時間前は指定できません。 12時間以上前のファイルは、すべて消えてかまいません。(例えば15時間前のファイルなど) できれば抽象的な説明ではなく、具体的で、すぐに動くコーディングを記述して下さると助かります。 以上宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.4

あんまり綺麗じゃないけど、、 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だとファイル毎にプロセスを起動する、シェルによっては{}をエスケープする必要があったような、)です、、。) ~

hanakoz
質問者

お礼

ご回答有難うございました。感謝いたします。

その他の回答 (4)

noname#39970
noname#39970
回答No.5

  //-----------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本体 沢山渡しても最後のファイルのみしか見ない ## エラーチェック無し

hanakoz
質問者

お礼

ご回答有難うございました。感謝いたします。

回答No.3

#2さんの改良? シンプル版で・・ # find <dir> -mmin +720 -exec rm {} \; -exec オプションはコマンドを実行できるので、パイプラインで次のコマンドで処理しないで済みます。

hanakoz
質問者

お礼

ご回答有難うございました。感謝いたします。

hanakoz
質問者

補足

ご回答有難うございました。感謝いたします。

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.2

findで24時間単位で指定するmtimeではなくて、分単位で指定するmminが使えれば、 find <dir> -mmin +720 -print | xargs rm というような事ができるかと思います。

hanakoz
質問者

お礼

ご回答有難うございました。感謝いたします。

hanakoz
質問者

補足

1、-mminは使用できませんでした。 2、POSIXシェルなのでperlも使いません。 上記2点を踏まえて、さらに方法をご存知の方は 宜しくお願い致します。

noname#39970
noname#39970
回答No.1

#! /bin/perl # 指定したファイル情報の時間が今より12時間以内なら偽(0) # 指定したファイル情報の時間が今より12時間超過なら真(1) # 未検証 # finfo[8] は最終アクセス時間 # finfo[9] だと最終更新日…らしい @finfo = stat $ARGV[0]; if (($finfo[8] - time) <= (12*60*60)) { return 0; } 1;

hanakoz
質問者

お礼

ご回答有難うございました。感謝いたします。

関連するQ&A