Linuxで、フォルダ単位でバックアップ(圧縮)し、更に世代管理(ローテート)できるスクリプトをご紹介します!バックアップを取得していれば、何か不具合があった際に戻せるようになりますので、安心設計のためにご活用下さい(。・ω・。)
[Linux] シェルスクリプトでフォルダ単位圧縮バックアップ & ローテート(世代管理)
スクリプト完成版
まずは、シェルスクリプトでフォルダ単位のバックアップを行い、更に世代管理(ローテート)もしてくれるスクリプトの全容をご紹介します!
# -------------------------------------------- # フォルダの日次バックアップ(世代管理) # ※日次で動かすこと前提 # $1 : バックアップ対象のフォルダ # $2 : バックアップ先のフォルダ # $3 : 管理世代(日) # -------------------------------------------- # 変数定義 back_up_path_from=`echo $1 | sed -e "s/\/\$//"` # フォルダパスの末尾が/の場合は除外する back_up_path_to=`echo $2 | sed -e "s/\/\$//"` # フォルダパスの末尾が/の場合は除外する yyyymmdd=`date +%Y%m%d` # 日付情報を取得 yyyymmdd_del=`date +%Y%m%d --date "$3 days ago"` # 削除するログファイルの日付を取得 # ファイル名取得 folder_name=`echo ${back_up_path_from} | tr -s '/' '\n' | tail -1` # フォルダ名のみを取得する # 対称フォルダへ移動 cd ${back_up_path_from} cd ../ # バックアップ実施 zip -r ${folder_name}_${yyyymmdd}.zip ${folder_name} mv ${folder_name}_${yyyymmdd}.zip ${back_up_path_to} # 過去バックアップファイル削除 rm -f ${back_up_path_to}/${folder_name}_${yyyymmdd_del}.zip
スクリプトの使い方
本スクリプトは、3つの引数を用いて利用します!使う人がしっかりすること前提の引数チェック入れていないバージョンですので、ご利用の際はご注意下さい(ノд・。)
引数1:バックアップ対象のフォルダ
引数2:バックアップ先のフォルダ
引数3:世代管理日数(数字)
# /usr/local/bin/配下を、7日間の世代管理でローテートする sh backup_daily.sh /usr/local/bin/ /tmp/99_backup/ 7
ソースコード解説
シェルで日付情報の取得
バックアップを取得する際に、世代管理をするためにフォルダの末尾に日付情報を追加します。また、世代管理(ローテート)のために削除ファイルも選定しますので、○○日前の日付もあわせて取得しています!
yyyymmdd=`date +%Y%m%d` # 日付情報を取得 yyyymmdd_del=`date +%Y%m%d --date "$3 days ago"` # 削除するログファイルの日付を取得
バックアップファイルを圧縮で取得
今回はzipファイル形式で取得しています!-rでフォルダ単位のzipファイル生成してます。
zip -r ${folder_name}_${yyyymmdd}.zip ${folder_name}
ファイル削除(世代管理)
世代管理を行うために、rmコマンド(remove)を利用してます。-fで強制削除ができます(yes, noを聞かれない形)
rm -f ${back_up_path_to}/${folder_name}_${yyyymmdd_del}.zip
この記事へのコメントはありません。