Linux 파일용 증분 백업 셸 명령 스크립트

간단한 증분 백업 스크립트를 사용한 후 나중에 참조할 수 있도록 일부 부분을 선택하고 기록합니다.

# 昨天对应的月份
n_mon=$(date -d -1day +%Y%m)
# 组合文件夹路径
path=/home/admin/"$n_mon"
# 昨天的0点作为增量备份起始时间,今日0点作为截止时间
s_date=$(date -d -1day +%Y-%m-%d)' 00:00:00'
e_date=$(date +%Y-%m-%d)' 00:00:00'

s_time=$(date -d "$s_date" +%s)
e_time=$(date -d "$e_date" +%s)

# 创建备份文件夹
today=$(date +%Y%m%d)
mon_path=/home/admin/bak/$n_mon
bak_path=$mon_path'/'$today
if [ ! -d "$mon_path" ]; then 
	mkdir -p $bak_path
else
	mkdir $bak_path
fi
echo '>>> 创建文件夹:'$bak_path
echo '>>> 开始备份文件。。。'
s_s=$(date +%s)
for file in `ls $path`; do
    file_path=$path'/'$file
	ctime=$(busybox stat -c %Y $file_path) 
	# 比对文件的修改时间
	if [ $ctime -ge $s_time ]&&[ $ctime -le $e_time ]; then
		cp $file_path $bak_path'/'$file
	fi
done
b_s=$(date +%s)
echo '>>> 文件备份完成!(耗时:'$(($b_s - $s_s))'s)'
echo '>>> 开始打包。。。'
tar -zcPf /home/admin/bak/$today-bak.tar.gz $bak_path
c_s=$(date +%s)
echo '>>> 打包完成!(耗时:'$(($c_s - $b_s))'s)'
echo '>>> 删除备份文件夹。。。'
rm -rf $bak_path
r_s=$(date +%s)
echo '>>> 删除完成!(耗时:'$(($r_s - $c_s))'s)'
echo '>>> 备份任务完成!(共耗时:'$(($r_s - $s_s))'s)'


대본 작성 과정의 몇 가지 문제는 잠시 후 잊어버릴 염려가 있으므로 기록합니다.

1. 스크립트가 실행 중일 때 스크립트 내용의 잘못된 형식으로 인해 다음과 같은 문제가 발생합니다.

$'\r': 명령을 찾을 수 없습니다. for file in ls 경로 ' ; dosyntaxerrornearunex pectedtoken ' path`; 예기치 않은 토큰 근처에서 구문 오류 발생 `p a t h ' ;d osyn t a x 오류가 거의 발생하지 않았습니다. 예상 하지 못한 ' ' do \ r ' 해결 방법 :
여기에 이미지 설명 삽입
npp 편집기 사용 하여 도구 모음 에서 편집 > 문서 형식 변환 > 다음으로 변환클릭 합니다 . 유닉스(LF)

2. 스크립트에서 얻은 타임 스탬프와 파일의 수정 시간, 기본값은 밀리초가 아닌 초입니다.

추천

출처blog.csdn.net/qq_42049516/article/details/131224426