shell 備份檔案指令碼+自動清理

big_cat發表於2023-01-11

自動清理超出備份數的最老備份檔案

#! /usr/bin/env bash

# 備份目錄
bak_dir="../bak"
# 備份最大數量
bak_max=5

# 備份檔名固定為如下格式
# archive.tar.gz

echo -n "請輸入備份版本號:"
read version

if [ -f ./archive.tar.gz ];then
  echo "clean archive.tar.gz"
  rm -rf archive.tar.gz
fi

tar -zcf archive.tar.gz ./*

if [ ! -d $bak_dir ];then
  mkdir $bak_dir
fi

bak_file="${bak_dir}/archive.${version}.tar.gz"

# 已存在備份檔案 則做覆蓋
if [ -f $bak_file ];then
  rm $bak_file
fi

cp archive.tar.gz $bak_file
echo "baking success $bak_file"

# 清除老的備份
bak_cnt=$(ls -l $bak_dir | grep "^-" | wc -l)
echo "bak cnt $bak_cnt"

while (( $bak_cnt > $bak_max )); do
  oldest_file=$(ls -rt $bak_dir | head -1) #獲取最舊的備份
  echo "delete old file: "$oldest_file
  rm -rf $bak_dir/$oldest_file
  let "bak_cnt--"
done

echo "----  bak file list ----"
ls -l $bak_dir | egrep "^-|^d"
echo "----  bak file list ----"

可執行許可權

chmod a+x bak.sh

在想要備份的資料夾下執行 ./bak.sh 即可

相關文章