電子書籍の厳選無料作品が豊富!

こんにちは。UNIX(HP-UX)のPOSIXシェルで質問です。

指定したフォルダの中の「現在時刻より12時間前のタイムスタンプのファイルを消す」方法はないでしょうか?

findコマンドは24時間の倍数しか検索できないので、12時間前は指定できません。
12時間以上前のファイルは、すべて消えてかまいません。(例えば15時間前のファイルなど)

できれば抽象的な説明ではなく、具体的で、すぐに動くコーディングを記述して下さると助かります。

以上宜しくお願い致します。

A 回答 (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だとファイル毎にプロセスを起動する、シェルによっては{}をエスケープする必要があったような、)です、、。)
~
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/25 22:44

 


//-----------timechecker.c
#include<stdio.h>
#include<time.h>
#include<sys/types.h>
#include<sys/stat.h>
void main (int argc,char *argv[])
{
 structstat 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本体 沢山渡しても最後のファイルのみしか見ない
## エラーチェック無し
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/25 22:44

#2さんの改良? シンプル版で・・



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

この回答への補足

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

補足日時:2006/12/16 20:10
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/16 20:11

findで24時間単位で指定するmtimeではなくて、分単位で指定するmminが使えれば、


find <dir> -mmin +720 -print | xargs rm
というような事ができるかと思います。

この回答への補足

1、-mminは使用できませんでした。
2、POSIXシェルなのでperlも使いません。

上記2点を踏まえて、さらに方法をご存知の方は
宜しくお願い致します。

補足日時:2006/12/16 20:12
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/16 20:10

#! /bin/perl


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

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

お礼日時:2006/12/16 20:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!