• ベストアンサー

シェルにてファイルの自動削除をするには?

シェルにて「abc.0101171109(.以降は年月日時分)」 というようなログファイルを一日3回、作成しています。 これを一週間、または一ヶ月たったら 自動的に削除するにはどうすればよいでしょうか。 OSはSolaris2.6で、 シェルはBでもCでも何でもかまいませんのでよろしくお願い致します。

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

  • ベストアンサー
回答No.4

findで条件を並べて書けばANDになるので-nameでファイルを制限すれば良いのではないでしょうか? paz777さんの例に追加してます。 find {directory} -name abc.\[0-9\]\* -mtime +7 -exec rm -r {} \; もちろん-nameあとの部分は希望のファイル名に合わせてください。 FreeBSD 4.2-RELEASEとUnixware7で動作確認してます。

その他の回答 (3)

  • paz777
  • ベストアンサー率47% (77/163)
回答No.3

すいません。再登場です。 h_hikitaさんの回答を見て、自分の回答が 「やばい」ことに気付きました。 σ(^^)の回答をそのまま実行すると、対象とならない 別のファイルまで削除してしまいます。 一応、ディレクトリ内には対象のログファイルしか ない場合が前提になります。(^^; すいませんでした。 「自信なし」に変更!!!

  • paz777
  • ベストアンサー率47% (77/163)
回答No.2

こんにちは。 UNIXコマンドのfindで対応できないでしょうか? find {directory} -mtime +7 -exec rm -r {} \; こんな形です。(最後の[;]も必要です) {directory}には、対象ディレクトリを指定して下さい。 [+7]が更新日になります。 1週間であれば[+7]、1ヶ月であれば[+30]ってな感じ です。 ではでは・・・

  • h_hikita
  • ベストアンサー率40% (104/257)
回答No.1

GNU Shell utilities のなかにあるdateコマンドをインストールして find . -not -newer `date '1 month ago' '+abc.%y%m%d0000'` -exec rm {} \; -print とかではどうでしょうか? あとは、atかcronでこれを定期的に実行する。 # サブディレクトリがない&同じディレクトリにはログファイル以外のファイルがないというのが前提です。

torigomoku
質問者

補足

すばやい回答ありがとうございます。 せっかくのご回答ですが、 インストールは行うことができないので、 できればインストールを行わずに、 シェルだけで何とかできないでしょうか?

関連するQ&A

  • シェルスクリプトで古いファイルの自動削除をするには?

    UNIXで以下の仕様を持つシェルスクリプトを作成しようと していますが、どうもうまくいきません。 どなたか、いい知恵を貸していただけないでしょうか? 目的: 特定のディレクトリ内にあるファイルについて、 システム日付より3日前のタイムスタンプを持つファイルを 削除する。 留意点: ・削除対象のファイルは複数存在する場合がある。 ・ファイルサイズは1件あたり 0byte-数百Mbyte となる  可能性がある。 ・ファイル名は不定。 ・スクリプトはBシェルまたはCシェルとする。 参考: ・現在使用しているOSについて  ls -l でのタイムスタンプにおける出力形式は以下のとおり  (デフォルト値?)  ・ 9月 28日 2000年    または   10月 24日 10時45分 知っている限りのコマンドを使っていろいろやってみたんですが、 結局ダメでした。 よろしくお願いします。

  • BシェルとCシェル

    Solarisサーバの運用において、シェルでスクリプトを作成する場合、BシェルとCシェルでは、どちらが多く用いられているでしょうか?

  • Cシェルについて

    OS:Solaris10:Sparc版 未だに初心者(いつになったら卒業できるのやら) 実はCシェルで1Mのファイルを1万個作るシェルを考えています。 なぜかというと移設の為です。 シェルは作成した事はないので困っています。 (自分なりに考えてやって見たいけどテスト機器がないので動作がわかりません。) 申し訳ございませんが詳しい方のご教授をお願いします。

  • リスナーログをシェルで自動で消す

    リスナーログをシェルで自動で消したいです。 ただ、ログは一切消失できません。 おおよそ #lisnctl LSNRCTL> set log_file listener.tmp.log # mv listener.log listener.old LSNRCTL> set log_file listener.log # cat listener.old listener.tmp.log > listener_YYYYMMDD.log のようなイメージを考えていますが、 これをシェル化(シェルでなくても自動化) する事は可能でしょうか?

  • Bシェル・Cシェルについて

    会社でシェルを使うことになりました。 OSはSolarisなので、basshが使えると考えていましたが、bashはNGと回答が来てしまいました。 回答はBシェルまたはCシェルを使うということでした。 bashはBシェルの拡張版でLinuxの標準シェルであるという事は知っています。 Bシェルだけの機能を使うのはかなり困難な気がしますし意識して作ったことがありません。 bashかBシェルか意識して使うにはどうすればよいでしょうか?

  • シェルスクリプト

    シェルスクリプトに関しては、まったくの初心者です。 OSは、SolarisとLinuxですが、シェルスクリプトを利用して下記のような自動実行プログラムを作りたいのですが、どなたかご教授下さい。 一台のWWWサーバのログ(例:access.log)を、1日に一回(出来ましたら朝の5時)に別サーバに送信するプログラムなのですがいかがでしょうか?このとき、出来れば送信先のファイル名は、送信した日付(例:20020222.log)にしたいです。説明不足かも知れませんが、ひとまずこれでお願いします。

  • Cシェル内でBシェルの様な関数の記述方法はありますか?

    タイトル通り、Cシェル内でBシェルの様な関数の記述方法はありますか? Bシェルで言う所の以下の様な記述方法です。 関数() { } OSはSolarisです。 よろしくお願いいたします。

  • シェルの存在確認コマンドでファイルを認識しない

    現在、solarisの吐き出すログの自動バックアップshellを運用しています。そのshellの内容は ifでディレクトリ内存在確認後、*でtarに固める、というもので、 if [ -s $abc/* ]; then cd $abc tar -cvf abc_`date "+%Y%m%d"`.tar * という内容なのですが、 if [ -s ・・・ の存在確認の時点でファイルは実際に存在するのに 存在を認識しない場合があるのです。。 ディレクトリ内のファイルの実行権を変えても認識せず、 たとえば認識しないディレクトリの中に「a」というファイルを 作って再度シェルを流してみると、今度は認識します。しかし削除するとしなくなります。また、認識しないファイルのmvで変名してやってみるとうまくいきます。 何が問題なのでしょうか?ファイルの存在確認において、認識しない場合というのがあるのでしょうか? お助けください!よろしくお願いします。

  • コマンドシェルで古いファイルの削除

     コマンドシェルで一週間前のファイルを  対象に削除するというのを作りたいのですが  ご教授ください

  • phpでのログファイル自動削除について

    phpでのログファイル自動削除について 以下のような形式でdataフォルダ内にログファイルに日付をつけて 毎日いくつかファイルを保存させているのですが data/ a_20100914_a.dat b_20100914_b.dat c_20100914_c.dat どんどん蓄積していくために ある程度日数が経過した古いファイルを自動で削除させたいのですが (たとえば3日前のものは全部削除など、削除プログラム自体の呼び出しにはcronのwgetを使います) ファイルが生成された日付で判断させる言う方法もあると思うのですが、 出来ればファイル名で日付を使っているのでそれを利用して出来ないものかと思うのですが どのように記述すればよいのでしょうか。 削除させるプログラムを置く予定場所はdataフォルダからみて../の位置になります。 お手数をおかけしますがソースをご教授いただけますと幸いですm(__)m

    • ベストアンサー
    • PHP