- ベストアンサー
solarisで2週間前のファイルを指定する方法
現在solarisのシステムを運用しており、ログのバックアップをしています。 クーロンによる時間指定で、別フォルダに圧縮してバックアップという 形なのですが、現在ではたまる一方なので2週間前のものを削除したいと考えています。 ファイルは log_`date "+%Y%m%d"`.tar という風に本日の日付で命名しているので、 本日から二週間前のものを削除、というスクリプトにしたいのですが。。。 if [*** -* ・・・] のような条件設定で、 たとえばファイル名が今日の日付から2週間前の日付が入っているかどうかを判定させるには どうしたらいいでしょうか? またはタイムスタンプを参照して、それが2週間前以前のもの、という指定をする方法があるのでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ふふふ。過去にも同様の質問がありました。 なーんて、実は2つ目の質問は私自身が起こした質問だったりします。 私も、ここで教えられたとおりにしてうまくいきました♪ いやー。感謝感謝でした。
その他の回答 (2)
- yakitori97
- ベストアンサー率75% (3/4)
タイムゾーンの値をずらすという技も使えるかも。 たとえばTZ=JST-9 の引き算の値をずらすと過去日付とかがdateコマンドで ひろえます。 (例・TZ=JST+15 でそのセッションでのdate表示が一日前になる) この戻り値でファイル名検索というのも手です。
お礼
タイムゾーンですか。また勉強になりました(笑 その方法でもやらせていただこうと思います。 ありがとうございました!
- xjd
- ベストアンサー率63% (1021/1612)
わたしはこんなスクリプトを使ってます。 よろしかったら参考にしてください。 1日につき1ファイル ファイル名に日付けを含ませる 過去7日間は通常保存 過去8ー14日間は圧縮して保存 過去15日以前は削除 使い方 (crontabに) 59 23 * * * rotatelog.sh /var/log/sendmail/sendmail.log > /dev/null 2>&1 23時59分に実行して60秒待つところがミソです。 rotatelog.sh ------------------------------------------------------ #!/bin/sh PATH=/bin:/usr/bin if [ -z "$1" -o ! -f "$1" ]; then exit 1 fi DATE=`date +%Y%m%d` sleep 60 if cp $1 $1.$DATE && cat /dev/null > $1; then find $1.???????? -type f -mtime 8 -exec gzip {} \; find $1.????????.gz -type f -mtime 15 -exec rm {} \; exit 0 fi exit 1 ------------------------------------------------------ (見やすいよう、空白には全角を使ってますのでコピぺするときは注意)
お礼
なるほど。。$1というのは確か/var/log/sendmail/sendmail.logをあらわすんでしたよね?? このような複雑なshellが組めるようにもっと勉強しようと思います。 参考になりました。ありがとうございました!
お礼
なるほど。。こんな方法があったんですね。早速テストしてみました。 明日あたりからshellに組み込んでいこうと思います。 ご回答ありがとうございました!