• 締切済み

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

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

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

数字順に並べて、数字が最大の3つだけのこして他は削除と言うことでいいですか? cd /home/hoge ls sample[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | sort -r | tail -n +4 | xargs -r rm 対象ファイルを、大きい順にならべて、4つ目以降だけ取り出して、削除。

回答No.1

毎回わざわざ新規ユーザーを作りなおして質問してるのはなぜ?

関連するQ&A

  • シェルスクリプトについて

    シェルスクリプトの勉強中です。 シェルで特定のフォルダに移動するスクリプトを書いているのですが、以下のような場合どうかいていけばいいのでしょうか? [例] /home/hogeの下にフォルダが1つだけある場合 sample01フォルダ →無条件でそのフォルダに移動する /home/hogeの下にフォルダが複数ある場合 sample01フォルダ sample02フォルダ sample03フォルダ →自分で選択して任意のフォルダに移動する  sample02と打ち込めばそこに移動出来るようにしたいです。 hoge配下のフォルダ名が不規則で定まっていない為、 複数ある場合にだけ選択リスト的なものを表示させて、間違えないように 移動させたいなと考えてます。 いい案などありましたら、ご教授いただけますと助かります。 よろしくお願い致します。

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

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

  • シェルスクリプト

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

  • 日付名のディレクトリを世代管理したい

    linuxのコマンドについて教えてください。 あるディレクトリ内で日付のディレクトリを3世代管理しています。 今まではrmで手動削除していたのですが、他のディレクトリでも同様の作業をしたいので、 スクリプトで行おうと考えています。 ただ、ディレクトリ内には様々な名称のフォルダ・ファイルがあり、 上手く日付のディレクトリを取ってこれません。 イメージとしては日付のディクトリだけを取ってきて、ソートし古いのを削除でいけると思うのですが… 詳細は以下です。 同一ディレクトリ内に以下のフォルダがある 20150101 20150103 20150105 20150107 hoge test sample.txt などなど この中で日付のディレクトリの4番目に古いディレクトリを削除したい。 (20150101のディレクトリだけ削除するイメージです) どのようにコマンドを打てばいいか教えていただけますでしょうか? よろしくお願い致します

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

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

  • 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 ↑      こんな感じで外部の保存先のパスはかけるのでしょうか? バックアップ処理 ○○日前のデータは削除 全体ではこんな感じになると思うのですが、具体的なスクリプトの説明をお願いできますでしょうか。 またよい参考サイトがあれば是非教えて下さい。 宜しくお願い致します。

  • Linux シェルスクリプト

    シェルスクリプト作成の今後の参考にしたいので 以下のスクリプトを1つでも良いので作成してみてください。 1、sono1.sh $ ./sono1 ファイル名 で、 ファイルを削除せずにあるフォルダ(例えば .box1)に移動させるスクリプト。 ただ、すでに .box1 に同名のファイルがあった場合には上書きせず、既 存のファイル、新しいファイル両方を .box1 内に保存できるようにしてください。 2、sono2.sh $ ./sono2 拡張子 で、.box2 というフォルダにあるファイルの内, 指定された拡張子をもつファイル名だけを表示するスクリプト。 3、sono3.sh 現在のディレクトリにあるファイルのうち、texファイルから生成されたフ ァイル (*.log, *.aux, *.dvi )を削除するスクリプト。 ただし、texファイルが存在しないものについては削除しない。 つまり、 333.tex 333.aux 333.dvi aaa.log が存在する場合、削除するのは 333.aux と 333.dvi だけ.

  • シェルスクリプトで

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

  • シェルスクリプトでファイルのコピー【gcc】

    Linuxのシェルスクリプトでgccでコンパイルしたファイルを連番でコピーするスクリプトの書き方があれば教えて下さい。 連番とはgccでhoge1.cをコンパイルした後スクリプトを実行すればhoge1をコピーしたhoge2.cが出来上がるという意味です

  • シェルスクリプトについて

    シェルスクリプトを勉強しています。 hoge.txt内で"AAA"という文字列を"BBB"という文字列を検索し下記のような処理を行いたいです。  (1)AAA・BBBともにある場合  →スクリプトを続行  (2)AAA・BBBともにない場合  →スクリプトを停止  (3)AAAしかない場合  →BBBがありませんというメッセージを流す    (4)BBBしかない場合  →AAAなしでスクリプトを続行しますというメッセージを流す   シンプルなやり方でいいので上記のようなことを行いたい場合、どのようにスクリプトを書けばいいのか教えてください。 よろしくお願いします。