• ベストアンサー

既存のバックアップを前日の日付にリネーム

Linuxのシェルの書き方初心者です。 教えてください。 前日バックアップしたファイルはリネームし、過去2日分バックアップとして保存しておくようにしていくにはどのようにしたらいいでしょうか? 以下のものに簡単に追記できるような書き方があれば教えてください。 よろしくお願いします。 #!/bin/sh cd /home/backup tar zcvf sample.tar.gz /var/www/sample

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

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

あーまちがい。 変数に$を付け忘れてました。 mv -f sample_$DATE_1.tar.gz sample_$DATE_2.tar.gz mv -f sample.tar.gz sample_$DATE_1.tar.gz

ymoshimoshi
質問者

お礼

ありがとうございます。試してみます。

その他の回答 (1)

回答No.1

#!/bin/sh DATE_1="`date --date '1 days ago' +%Y%m%d` DATE_2="`date --date '2 days ago' +%Y%m%d` cd /home/backup mv -f sample_DATE_1.tar.gz sample_DATE_2.tar.gz mv -f sample.tar.gz sample_DATE_1.tar.gz tar zcvf sample.tar.gz /var/www/sample とか? (ホントはtarコマンドを最初に実行してテンポラリディレクトリに保存し、その成功を確認してからリネーム~削除した方が安全かとは思います。上のスクリプトだと3日失敗するとバックアップがすべて消失します) または最初から日付付きのtar.gzファイルを作成して、 最後にfindコマンドで2日以上たったファイルを削除するとか。

関連するQ&A

  • Linuxでバックアップのために別のハードにファイルを転送したいです。

    Linuxでバックアップのために別のハードにファイルを転送したいです。 とても困っています。どうか力を貸してください。よろしくお願いします。 下のソースを毎日実行するようにクーロンで設定しています。 下記でコメントアウトしている##ファイル転送##の処理以外は成功しています。 バックアップ用の圧縮ファイル作成と古いファイルの削除が成功しています。しかし、 同じハード内にあるのでハード自体が潰れた場合に備えて別のハードに転送したいです。 Linux初心者で調べながら作成しています。 他に必要な情報があれば教えて下さい。よろしくお願いします。 ----(↓↓↓ソースです↓↓↓)---------------------------------------- #!/bin/sh if [ -x /usr/local/pgsql/bin/pg_dump ]; then today=`date +%y%m%d` filenm="/home/backup/postgres/$1" su postgres -c "/usr/local/pgsql/bin/pg_dump $1 > $filenm$today" tar zcvf $filenm$today.tar.gz $filenm$today chown backup $filenm$today.tar.gz chgrp backup $filenm$today.tar.gz chmod 640 $filenm$today.tar.gz rm -f $filenm$today # remove old backup file oldday=`date --date '1 weeks ago' '+%y%m%d'` rm -f $filenm$oldday.tar.gz ##ファイル転送## # USERNAME='system\\backup' # PASSWORD=●●●●●●●●●●● # HOSTNAME=192.168.●●.●● #ftp -n <<EOL #open ${HOSTNAME} #user ${USERNAME} ${PASSWORD} #binary #cd backup #put $filenm$today.tar.gz #bye #EOL fi exit 0 ----(↑↑↑ソースです↑↑↑)----------------------------------------

  • 3日以前のバックアップを削除する

    /etc/crontabで以下のbackup.shを毎晩実行するのですが、 3日以前のものは毎回消していく場合は以下のような、 少し初心者的な書き方しか現在分からないのですが、 他にもし良い書き方があれば、教えていただけますでしょうか? よろしくお願いします。 #!/bin/sh DATE_1=`date -d '1 day ago' +%Y%m%d` DATE_2=`date -d '2 days ago' +%Y%m%d` DATE_3=`date -d '3 days ago' +%Y%m%d` if [ test_$DATE_2.tar.gz ]; then mv -f test_$DATE_2.tar.gz test_$DATE_3.tar.gz fi rm -f test_$DATE_3.tar.gz if [ test_$DATE_1.tar.gz ]; then mv -f test_$DATE_1.tar.gz test_$DATE_2.tar.gz fi if [ test.tar.gz ]; then mv -f test.tar.gz test_$DATE_1.tar.gz fi tar zcvf test.tar.gz /usr/local/test

  • ubuntuでバックアップデータをメールに添付して送りたい

    バックアップしたデータをtar.gz形式にしたものを、メールに添付して外部へ送りたいと考えているのですが、うまくいきません。 コマンドラインより /usr/bin/uuencode /var/www/backup/data.tar.gz sdata.tar.gz | mail -s 'backup' test@test.co.jp のような形で実行すると、エラーメッセージもでないのですが、メールも届きません。 そもそも、メールが届く環境を構築できているのかすらわからなくなってきてしまいました。 コマンドラインよりどのようなコマンドを打てば確認できますか? 初歩的な質問ですみません。

  • cronからtarで圧縮しようとすると、途中で終わってしまいます

    サーバーはCentOS 5.3です。 以下はroot権限での話です。 コマンドラインで /bin/tar cvzf /home/myhome/backup/var_backup.tar.gz /var と打ち、実行すると正しく圧縮されたファイルが出来上がります。 解凍してみても問題ありません。 大きさは700MBくらいになります。 ところが同じコマンドをCronにセットして実行すると、ファイルはできるのですが 254K というとても小さなファイルが出来上がって終わってしまいます。 解凍してみるととても中途半端なところで圧縮が終わっているみたいです。 5 0 * * * /bin/tar cvzf /home/myhome/backup/var_backup.tar.gz /var のように書いています。 rootのcrontabなので権限の問題ということも無いと思うのですが。 別のディレクトリでも試してみたのですが同じ結果でした。 別のサーバーで同じくCentOS5.3を使っていて、同じことをやっているのですが そちらはうまく行っているのです。 どなたか解決策などご存知でしたら教えてください。 同じような質問が過去にもあったようなのですが、未解決で終わっていました。

  • crontabでtarを実行した際、エラーではないものは出力されずに実行できるコマンドを教えてください

    crontabでシェルスクリプトを立ち上げて自動バックアップをさせているのですが、crontabのレポートメールに tar: Removing leading `/' from member names と出ます。 実行内容は tar zcvf /home/__ArchiveFolder/backup_`date +%Y%m%d`.tar.gz /home/public_html なのですが、サイレントモードで実行というのでしょうか、このメッセージのメールを送られてこないように出来るのでしょうか? 言い換えますと、path名の頭に / があると、展開時に面倒が起こるから、/を取り除いてくれていいのですが、いちいちレポートしなくてもいいので、quietモード(manにはありませんでした)のようにするにはどうしたら良いのでしょうか?

  • データベースのバックアップだけ取れない場合があって困ってます(バックアップ用シェルの書き方に関して)

    以下のようなシェルをcronで実行し、バックアップを取ろうとしているのですが、データベースのバックアップだけ、うまくいく場合と抜けてしまう場合があります。 下のシェルのどの部分を変えれば、データベースのバックアップも毎回ちゃんと取ってくれるようになるのでしょうか。 ------------------------------ #!/bin/bash NAME="name" DBNAME="dbname" DBUSER="dbuser" DBPASS="dbpass" HTML="/home/test/www/" BACKUPDIR="/bakup/" mkdir -p $BACKUPDIR$NAME mkdir /tmp/backup-$NAME-`date +%Y%m%d` mysqldump --databases $DBNAME > /tmp/backup-$NAME-`date +%Y%m%d`/bk.sql -u $DBUSER --password=$DBPASS --opt ( cd /tmp/backup-$NAME-`date +%Y%m%d` ; tar cf /tmp/backup-$NAME-`date +%Y%m%d`.tar . ) ( cd $HTML; tar rf /tmp/backup-$NAME-`date +%Y%m%d`.tar . ) rm -r /tmp/backup-$NAME-`date +%Y%m%d` gzip /tmp/backup-$NAME-`date +%Y%m%d`.tar mv -f /tmp/backup-$NAME-`date +%Y%m%d`.tar.gz $BACKUPDIR$NAME find $BACKUPDIR$NAME -type f -mtime +7 | xargs rm -f ------------------------------ それでは、宜しくお願いします!

  • unixのバックアップログを減らしたい

    お世話になっております. 現在サーバのバックアップを定期的に行おうと考えております. OSは,RHLでtar.gzで/homeを取るスクリプトを作り, cronで動作させました.そして最後にtarのログを メールにて関係者に送るのですが,生成されたログが 85万行もあり,70Mを超えておりました! そこでログの行数を減らしたいのですが, 現在は, tar zcvf ${HOMEPATH}_a.tar.gz /${HOMEPATH} >>& ${DIRPATH}/home_a_backup_${DATE}.log としております. これだと,全てのファイルがログとして記録されるので, せめて, /home/usrname/xxx くらいで記録は止めたいのです. 何か良い方法はありますでしょうか.  よろしくお願いします.

  • 差分バックアップのコマンド

    今使用しているサーバのバックアップに 毎日フルバックアップで二時間もかかるんで 差分バックアップに変えようかなーとか 思ってるんですが、下のコマンドってあってます? time find /home/data -mtime -1 ! -type d -print | tar cfz /home/backup/test/backupdata-`date +%Y%m%d`.tar.gz ちなみに当日変更・新規作成したものだけバックアップしたいです。 dumpとかがいいんでしょうけど、できればtarでやりたいんです。 教えてくださいお願いします。

  • メールのバックアップ方法

    RedHatLinux9でmail&webサーバーを構築してます。 毎日、午前3時に /var/spool/mailと/var/www/htmlをテープにバックアップしてるんですが どうやらその時にメールの送受信をしているとバックアップに失敗しているようでした。 今までは backup.shというのを作りcronに登録してます。 記述内容は tar cvf /dev/st0 /var/spool/mail /var/www/html です。 で、失敗したのでそれならと、まず/var/spool/mailを/root/backupにコピーしてからバックアップしようと mkdir backup cp -f /var/spool/mail /root/backup tar cvf /dev/st0 /var/spool/mail /var/www/html /root/backup としました。 でもこれでもうまくいかなかったようです。 エラーログは以下のようになっています。 mkdir: cannot create directory `/root/backup': File exists cp: omitting directory `/var/spool/mail' tar: /dev/st0: Cannot open: No such device tar: Error is not recoverable: exiting now 一度失敗してから テープの調子も悪くなってきているようです。

  • linux シェルの変数、引数の指定について教えて

    シェルの勉強を始めまして、 ファイルを複合化、解凍するだけのシェルを作ろうと思っています。 fukugo.sh $1 でシェルを実行 /home/allday/log/upload/201701261507(←ログの作られる時間で変わります)aaaaa.tar.gz.e というファイルを$1引数に指定 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー !/bin/sh # # init CWD=$(cd $(dirname $0) && pwd) #cd ${CWD} # if [ -z $1 ] then echo "引数を指定してください" exit fi echo "Start" echo "指定されたtarファイルを複合化します" fukugo-decrypt $1 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー fukugo-decryptは私の会社で使われているtarを複合化するコマンドです(環境変数?) 複合化すると /home/allday/log/upload/201701261507aaaaa.tar.gz というファイルになります。 このできたファイルをシェルに入れる次のコマンドの引数にしたいです。 が最後の.eが無くなるため$1では指定できないと思います。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー echo "複合化されたファイルを/tmpフォルダに入れておきます" mv /home/allday/log/upload/201701261507aaaaa.tar.gz /tmp/ echo "ファイルを展開します" tar zxvf /tmp/201701261507aaaaa.tar.gz echo "End" ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 複合化された後の/home/allday/log/upload/201701261507aaaaa.tar.gzや 移動後の/tmp/201701261507aaaaa.tar.gzは変数で設定するとよいと聞いたのですが、 どのように設定すればよいかわかりません。 お分かりになる方、お願いします。 教えてください。