- ベストアンサー
特定ディレクトリに日付ディレクトリを作成してバックアップするスクリプトの使い方
- Serversman@VPSで日次バックアップを作成するためのスクリプトの使い方を教えてください。
- スクリプトを実行すると、日付を名前とするディレクトリが作成され、その中にバックアップが保存されます。
- スクリプトの先頭に「cd /mnt/smdisk」と追加することで、指定したディレクトリ内に日付ディレクトリを作成することができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まず, このスクリプトでは mkdir $dir としていますが, $dir は絶対パスにはならないので, ディレクトリは「この mkdir を実行する時点でのカレントディレクトリ」に作られます. 「この mkdir を実行する時点でのカレントディレクトリ」がどこかは知りませんが, そのあとの tar で ../../httpdocs としているのでおそらくルートディレクトリとは違うのではないでしょうか. そして, cd /mnt/smdisk を追加すると「tar 以外」は大丈夫な感じがします. 逆に tar は適切なディレクトリをとれないのでまずそうな気がする. そもそもこのスクリプト自体無駄に cd してるように思えます. cd せず dir=$(date +"%Y-%m-%d-%H%M") mkdir $dir mysqldump --default-character-set=utf8 -u {ユーザ名} -p{パスワード} ablogcms > $dir/ablogcms.sql tar zcfv $dir/httpdocs.tgz ../httpdocs find . -name "20*" | sort -r | while read deldir; do let num="${num=0}+1"; if test $num -ge 10; then rm -rf $deldir;fi; done; くらいにはすべきだし, 最後の find のパイプラインも怪しいのでもうちょっとすっきりさせたいところ.
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
本来の目的について何も書いてなかった.... とりあえず backuproot=/mnt/smdisk として dir=$(date +"%Y-%m-%d-%H%M") を dir=$backuproot/$(date +"%Y-%m-%d-%H%M") に変え, 最後の find でカレントディレクトリを表す . を $backuproot に置き換えればできるんじゃないかな. dir という変数名はなんか気にいらないので変えた方がいいかもしれんけど. あと, 最後の find のところは while を使わない方がいいんじゃないかなぁ. 多分 find $backuproot -name "20*" | sort -r | sed -e '1,10d' | xargs rm -rf でいけそうな気がする (けど動作確認は自己責任でお願いしますね). ついでにいうとこの find で本当にいいのかどうか微妙だし (もうちょっとオプションを付けたりして限定しておくべきかもしれない), あるいはそもそも find じゃなくて ls に適当なオプションを付ければそれでいいだけなのかもしれない.
お礼
こんなに早くアドバイスをありがとうございます! >「tar 以外」は大丈夫な感じがします. そうですね、tarの行を見落としていました。 うっかり、このままコピペする勢いだったので助かりました。 教えて頂いたばかりか、エレガントに書き換えて頂くなど何とお礼を申し上げていいか! 最後のfindも考えてみます。 ありがとうございました。