事故回顾
那天下午,我正在修改WordPress网站,不小心在后台删除了自己辛苦开发数月的子主题。瞬间冷汗直冒——这个子主题包含了大量的自定义功能和样式修改,没有Git备份,没有本地备份!!
更绝望的是,宝塔面板的回收站里竟然找不到被删除的子主题文件!原来,通过WordPress后台删除的文件不会进入宝塔的回收站系统
就在几乎要放弃的时候,我发现了宝塔的”文件历史快照”功能。这个救命功能记录了过去100次文件修改的历史版本,最终成功恢复了所有文件。下面就把这个救命方法分享给大家

宝塔文件历史快照原理
宝塔面板有一个很多人不知道的强大功能:文件修改历史记录。它会:
- 自动记录文件的每次修改(包括删除)
- 为每个修改保存一个时间戳版本
- 默认保留最近的100个版本
- 存储在特定的备份目录中
备份文件通常位于:/www/backup/file_history/目录下。
恢复前的准备工作
1. 确认备份文件位置
登陆你的宝塔面板然后前往/www/backup/file_history/www/wwwroot查看对应的网址找到文件所在目录
2. 找到你的主题备份
我的网站路径是 /www/wwwroot/www.vxras.com/,被删除的子主题在:/www/wwwroot/www.vxras.com/wp-content/themes/grace/
对应的备份路径就是:
/www/backup/file_history/www/wwwroot/www.vxrs.com/wp-content/themes/grace/
手动恢复方法(适合单个文件)
查看备份文件结构,你会看到类似这样的结构:
functions.php/
├── 1746608465 (最新版本)
├── 1746601234
└── 1746599876
style.css/
├── 1746608470
└── 1746601250
复制最新版本的functions.php(数字最大的就是最新版本)
批量恢复脚本(推荐使用)
手动恢复每个文件太麻烦,我写了一个自动脚本:
#!/bin/bash
# 恢复脚本
# 使用方法:chmod +x restore.sh && ./restore.sh
# 快照所在目录
BACKUP_ROOT="/www/backup/file_history/www/wwwroot/www.vxras.com/wp-content/themes/grace"
# 需要恢复的目录
TARGET_ROOT="/www/wwwroot/www.vxras.com/wp-content/themes/grace"
# 恢复日志
LOG_FILE="/tmp/restore.log"
echo "$(date) 开始恢复..." | tee "$LOG_FILE"
# 备份现有文件(防止误操作)
if [ -d "$TARGET_ROOT" ]; then
backup_dir="${TARGET_ROOT}_backup_$(date +%Y%m%d_%H%M%S)"
echo "备份现有文件到: $backup_dir" | tee -a "$LOG_FILE"
cp -r "$TARGET_ROOT" "$backup_dir"
fi
# 创建目标目录
mkdir -p "$TARGET_ROOT"
# 恢复函数:处理单个文件的最新版本
restore_latest_version() {
local backup_file="$1"
local relative_path="${backup_file#$BACKUP_ROOT/}"
# 提取真实文件名(去掉时间戳目录)
if [[ "$relative_path" =~ ^(.+)/([^/]+)/[0-9]+$ ]]; then
local file_dir="${BASH_REMATCH[1]}"
local real_filename="${BASH_REMATCH[2]}"
local target_path="$TARGET_ROOT/$file_dir$real_filename"
# 确保目录存在
mkdir -p "$(dirname "$target_path")"
# 复制文件
cp "$backup_file" "$target_path"
echo "✓ 恢复: $file_dir$real_filename" | tee -a "$LOG_FILE"
fi
}
# 导出函数,用于find命令
export -f restore_latest_version
export BACKUP_ROOT TARGET_ROOT
# 查找所有时间戳备份文件,并按时间戳排序处理
find "$BACKUP_ROOT" -type f -name "[0-9][0-9]*" -print0 | while IFS= read -r -d '' file; do
restore_latest_version "$file"
done
# 修复文件权限
echo "修复文件权限..." | tee -a "$LOG_FILE"
chown -R www:www "$TARGET_ROOT"
find "$TARGET_ROOT" -type f -exec chmod 644 {} \;
find "$TARGET_ROOT" -type d -exec chmod 755 {} \;
echo "$(date) 恢复完成!详细日志见: $LOG_FILE" | tee -a "$LOG_FILE"
echo "恢复文件统计:" | tee -a "$LOG_FILE"
find "$TARGET_ROOT" -type f | wc -l | tee -a "$LOG_FILE"
使用步骤
1、保存脚本
创建一个名为restore.sh的文件
2、赋予执行权限
chmod +x restore.sh
3、执行脚本进行恢复
./restore.sh
4、检查恢复结果(可选)
# 查看恢复日志
tail -f /tmp/restore.log
# 检查文件数量 (目录改成你恢复后的目录
find /www/wwwroot/www.vxras.com/wp-content/themes/grace/ -type f | wc -l
常见问题解答
Q: 宝塔文件历史记录保存多久?
A: 默认保存最近的100个文件版本,具体可在宝塔设置中调整
Q: 如果找不到备份文件怎么办?
A: 检查其他可能的位置:/www/.Recycle_bin/(回收站)、/www/backup/(手动、自动备份目录),或者联系服务器提供商
图片、视频等无法编辑的文件是无法恢复的哦!



暂无评论内容