用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 -
|