• ベストアンサー

【シェルスクリプト】ファイルを検索しヒット…

シェルスクリプトの書き方で躓いたのでご教授ください。 「backup-日付」というファイル名のバックアップを毎日とっています。 これを30日たったら1つ追加するごとに一番古いファイルを1つ消すようにスクリプトを組みたいのですが、どのような組み方がありますか? 宜しくお願いします。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

1.タイムスタンプで判断する方法 find . -name "backup-*" -mtime +30 -exec rm {} ";" 2. ファイル名で判断する方法 backup-20120629 というようなファイル名だとすると、 x=`date -d "30 days ago" +%Y%m%d` for y in backup-* do if test "${y/backup-/}" -lt "$x" then rm "$y" fi

kracfire
質問者

お礼

回答有り難うございます。 参考にさせて頂きます。

関連するQ&A

  • シェルスクリプト

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

  • Linuxのバックアップシェルについて教えて下さい

    Linuxで、簡単なバックアップのシェルを作成する必要があり、今勉強を始めました。 これから確り勉強しますので、参考としてやりたいことのスクリプト例を教えて頂けませんでしょうか。 やりたいことは、Linuxサーバー内のフォルダAをファイルサーバー上のフォルダBへ日次でコピーです。 この時、フォルダAまでのパスには、日付名が入っており毎日変わります。シェル実行日の1日前のデータをコピーしたい場合、まずパスの作り方がわかりません。 PATH=/usr/local/sbin:/usr/bin:/bin #昨日の日付の取得 YESTERDAY= DATE +%Y%m%d #バックアップ対象のパス取得 BACKUP-PATH= 1G/昨日の日付/log/ ↑              ここがわかりません。$YESTERDAYと入れてみましたがダメでした。 #バックアップ先のパス取得 TARGET= \\filseerver/1G/日付/log ↑      こんな感じで外部の保存先のパスはかけるのでしょうか? バックアップ処理 ○○日前のデータは削除 全体ではこんな感じになると思うのですが、具体的なスクリプトの説明をお願いできますでしょうか。 またよい参考サイトがあれば是非教えて下さい。 宜しくお願い致します。

  • シェルスクリプトで

    いくつかのテキストファイルがあって, その中で内容が重複するもの(ファイル名は違うが中身は同じ)ファイルをみつけるシェルスクリプトが書きたいのですが, どのように書けばよいでしょうか. というかそのように書くことは可能でしょうか. ぶしつけですいませんが,回答お願いいたします.

  • シェルスクリプトの「{} \;」部分の意味は?グーグル等でも検索できない状態です。

    以下のようなシェルスクリプトを見かけますが、「{} \;」部分の意味が分かりません。記号なので、グーグル等でも検索できない状態です。 #二日前のファイルを削除 find /backup -mtime +1 -maxdepth 1 -name '*.zip' -exec rm -f {} \; 上記のようなシェルスクリプトの「{} \;」部分は、どのような意味があるのでしょうか?特にプログラムと違いシェルスクリプトは;(コロン)で終わる必要がないのに、終わっているのが不思議です。 よろしくお願いします。

  • シェルスクリプトで標準エラーが出たらスクリプトを停止させる方法は?

    centOS 5で] 以下のようなシェルスクリプトを実行させています。 #!/bin/bash mount -t cifs -o username=root,password=abcd //192.168.0.5/backup /mnt/win rsync -vr /home/data /mnt/win >> backup.log 上のシェルスクリプトでもしmountが失敗したらスクリプトを停止させる方法を 探しています、どなたかご教授願います。

  • シェルスクリプトでファイル名変更

    あるディレクトリにあるファイルの名前をシェルスクリプトで一括変更したいと思っています。 旧ファイル名 新ファイル名 apple   banana orange   lemon kiwi      melon strawberry apricot のように、新旧ファイル名(拡張子を除く)をタブで区切ってfilename.txtというファイルに入れてあります。ごらんの通り新旧ファイル名とも規則的ではありません。拡張子は新旧ともすべて.wavです。 awkもしくはreadでできるかなと思ったのですが、私の力ではできませんでした。お知恵を拝借できれば幸いです。(シェル初心者、使っているのはBシェルです)

  • シェルスクリプトのバックアップ世代管理について

    シェルスクリプトで質問です。まだ勉強しはじめなのですが、条件がついた時のファイル削除がわかりません。 どなたか教えていただけると助かります。 やりたいことは以下です。 /home/hogeフォルダ内に以下のファイルがあります。 sample20150101 sample20150102 sample20150103 otherXX otherYY otherYYYYMMDD 他にも多数 この中からsampleファイルでファイル名の後ろについている日付が古いものを削除したいです。 ただし、更新日がファイル名の末尾にある日付とは限りません。 またsampleYYYYMMDDは末尾の日付が直近の3ファイル(3日分)は残したいです。 他のファイルには影響ないようにしたいとも考えてます。 ネットで調べて更新日で世代管理はなんとか出来たのですが、ファイル名で判定するやり方がわからず… こういった場合、どのようにスクリプトを書けばいいのでしょうか? まだ勉強しはじめたばかりなので知識がなくて申し訳ないのですが、教えていただけると助かります。 よろしくお願いします。

  • cronでシェルスクリプトが実行されない

    Linuxでファイルのバックアップを取るため backup.shというシェルスクリプトを組み、コマンドから実行する場合問題ないことを 確認しています。ところがcronに設定し自動実行すると内容が実行されておりません。 /var/log/cronを確認したところ時間通り実行されているというログは残っています。 /var/spool/cron/にrootというファイルを作成し 00 23 * * * /BACKUP/backup.shを実行させたいのです。 なぜ、手動の場合は問題がないのにcronで設定すると問題が生じるのでしょう? もし、お分かりの方は教えてください。 OSはRed Hat Linux release 8.0 (Psyche)です。

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

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

  • シェルスクリプトの書き方 > で追記

    こんばんは。 vsftpdのユーザを自動で追加するシェルスクリプトを作っています。 vsftpd.user_listに登録されたユーザのみFTP接続を許可する設定なので、 ($accountNameはFTP接続を許可するユーザ名が入っている変数) $accountName > /etc/vsftpd.user_list としてスクリプトを走らせたところ、確かにユーザは追加されていたのですが、 スクリプトを走らせる前に記述してあったユーザが(と言わず注意書きすらも!!) 消えてしまいました・・・。 上書きではなく追記したかったのですが、シェルスクリプトではそういう ことはできないのでしょうか?

専門家に質問してみよう