編集部からのお知らせ
ZDNet Japanが新しくなりました!
New! 懸念高まる産業機器のセキュリティ

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

OKWave

2007-08-08 13:00

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

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

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

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

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

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

良回答

あんまり綺麗じゃないけど、
1.12時間前のタイムスタンプを持つファイルを作成
2.そのファイルより古いものを消す
という手を使うと

DATE=`date -d '12 hours ago' +%m%d%H%M%y`
echo >temp.file
touch $DATE temp.file
find  !-newer temp.file -print | xargs rm
rm temp.file

みたいなスクリプトでできるかも知れません。
(実際に試したわけではないのですが)

(findでexecを使わないのは、、個人的な趣味(execだとファイル毎にプロセスを起動する、シェルによっては{}をエスケープする必要があったような、)です、、。)

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

ZDNet Japan 記事を毎朝メールでまとめ読み(登録無料)

Special PR

特集

CIO

セキュリティ

スペシャル

NEWSLETTERS

エンタープライズ・コンピューティングの最前線を配信

ZDNet Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]