shell命令备份文件夹

用shell命令备份文件夹放到指定位置,并加密压缩文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/bin/bash
# 定义文件夹路径
folder_path="/var/log/syslog"
# 定义压缩包存储路径
backup_path="/opt/backups"
# 定义压缩包文件名前缀
backup_pre="syslog_"
# 定义加密压缩包(1.加密 0.不加密)
backup_encrypt=1
# 定义压缩包密码
backup_password="MyPasswd"
# 定义备份文件个数(按照时间排序)
backup_max_files=10

# 打包文件夹为压缩包(基于日期和时间)
if (($backup_encrypt == 1)); then
# 加密压缩包
backup_filename="$backup_pre$(date +%Y%m%d%H%M%S).des3.pbkdf2.tar.gz"
tar -czvPf - "$folder_path" | openssl des3 -salt -pbkdf2 -k ${backup_password} | dd of="${backup_path}/${backup_filename}"
else
# 不加密压缩包
backup_filename="$backup_pre$(date +%Y%m%d%H%M%S).tar.gz"
tar -czvPf "${backup_path}/${backup_filename}" "${folder_path}"
fi
echo backup file "${backup_path}/${backup_filename}"

# 获取备份文件列表
backup_files=($(ls -t "${backup_path}"))

# 检查备份文件数量
num_backup_files=${#backup_files[@]}

# 如果备份文件数量大于10,则删除多余的文件
if ((num_backup_files > backup_max_files)); then
files_to_delete=$((num_backup_files - backup_max_files))
for ((i=backup_max_files; i<$num_backup_files; i++)); do
file_to_delete="${backup_path}/${backup_files[$i]}"
echo delete file $file_to_delete
rm -f "$file_to_delete"
done
fi

echo 'done'

tar加密文件也可使用以下方式

1
$ tar -czvPf - "$folder_path" | openssl des3 -salt -pbkdf2 -k ${backup_password} > "${backup_path}/${backup_filename}"

解密文件

1
$ openssl des3 -d -salt -pbkdf2 -k MyPasswd -in xxxx_encypt.des3.pbkdf2.tar.gz -out xxxx_decrypt.tar.gz

解密文件后直接在当前路径解压

1
$ openssl des3 -d -salt -pbkdf2 -k MyPasswd -in xxxx_encypt.des3.pbkdf2.tar.gz | tar zxvf -