本文目录导读:

可以的,通过脚本自动备份浏览器书签是一个很实用的需求,不同浏览器的书签文件位置和格式略有不同,但基本原理相似:找到书签文件 -> 复制到备份目录 -> 可选加入时间戳和压缩。
下面提供几个针对不同场景的实用脚本,你可以根据自己的操作系统和浏览器选择。
核心原理
大多数主流浏览器(Chrome, Edge, Brave, Opera)都基于 Chromium 内核,它们会将书签保存在一个名为 Bookmarks 的 JSON 文件中(没有后缀名),Firefox 则使用 places.sqlite 数据库文件。
Windows 系统 (PowerShell 脚本)
此脚本适用于 Chrome、Edge、Brave 等 Chromium 内核浏览器。
功能:
- 自动定位当前用户的 Chrome 书签文件。
- 复制到
D:\BookmarkBackups文件夹。 - 在文件名后添加当前日期(
Bookmarks_2025-05-21.json)。 - 保留最近 30 天的备份,自动删除更早的。
# Windows_Backup_Bookmarks.ps1
# --- 配置区 ---
$sourcePath = "$env:LOCALAPPDATA\Google\Chrome\User Data\Default\Bookmarks"
$backupRoot = "D:\BookmarkBackups"
$retentionDays = 30
# --- 配置结束 ---
# 创建备份目录(如果不存在)
if (-not (Test-Path -Path $backupRoot)) {
New-Item -ItemType Directory -Path $backupRoot | Out-Null
Write-Host "已创建备份目录: $backupRoot" -ForegroundColor Green
}
# 检查源文件是否存在
if (-not (Test-Path -Path $sourcePath)) {
Write-Host "错误:找不到 Chrome 书签文件!" -ForegroundColor Red
Write-Host "路径: $sourcePath" -ForegroundColor Red
exit 1
}
# 生成带时间戳的文件名
$timestamp = Get-Date -Format "yyyy-MM-dd_HHmmss"
$backupFileName = "Chrome_Bookmarks_$timestamp.json"
$backupFilePath = Join-Path -Path $backupRoot -ChildPath $backupFileName
# 执行复制
try {
Copy-Item -Path $sourcePath -Destination $backupFilePath -Force
Write-Host "书签备份成功!" -ForegroundColor Green
Write-Host "备份文件: $backupFilePath" -ForegroundColor Cyan
} catch {
Write-Host "书签备份失败!错误信息: $_" -ForegroundColor Red
exit 1
}
# 清理旧备份(仅保留最近 N 天的)
$cutoffDate = (Get-Date).AddDays(-$retentionDays)
$oldBackups = Get-ChildItem -Path $backupRoot -Filter "*.json" | Where-Object {
$_.CreationTime -lt $cutoffDate
}
foreach ($oldBackup in $oldBackups) {
Remove-Item -Path $oldBackup.FullName -Force
Write-Host "已删除旧备份: $($oldBackup.Name)" -ForegroundColor Yellow
}
Write-Host "备份完成,已保留最近 $retentionDays 天的记录。" -ForegroundColor Green
使用方法:
- 将代码保存为
backup_bookmarks.ps1。 - 右键点击文件 -> “使用 PowerShell 运行”。
- (可选)在 Windows 任务计划程序中创建基本任务,设置为每天或每周自动执行。
macOS / Linux 系统 (Bash 脚本)
此脚本设计为跨平台,自动检测 macOS 和 Linux 下的常见浏览器。
功能:
- 自动检测 Chrome、Edge、Brave、Vivaldi、Opera、Firefox。
- 备份到
~/BookmarkBackups目录。 - 文件名包含浏览器名和日期(
Chrome_Bookmarks_2025-05-21.json)。 - 自动压缩为
.tar.gz格式节省空间。 - 只保留最近 14 天的备份。
#!/bin/bash
# Mac_Linux_Backup_Bookmarks.sh
# --- 配置区 ---
BACKUP_DIR="$HOME/BookmarkBackups"
RETENTION_DAYS=14
# --- 配置结束 ---
# 创建备份目录
mkdir -p "$BACKUP_DIR" 2>/dev/null
# 获取当前日期
DATE_STAMP=$(date +"%Y-%m-%d")
# 定义浏览器书签路径模式
declare -A BROWSERS=(
["Chrome"]="$HOME/Library/Application Support/Google/Chrome/Default/Bookmarks"
["Edge"]="$HOME/Library/Application Support/Microsoft Edge/Default/Bookmarks"
["Brave"]="$HOME/Library/Application Support/BraveSoftware/Brave-Browser/Default/Bookmarks"
["Firefox"]="$HOME/Library/Application Support/Firefox/Profiles/*.default*/places.sqlite"
)
# Linux 路径覆盖(如果在 Linux 下运行,自动修正路径)
if [[ "$(uname)" == "Linux" ]]; then
BROWSERS=(
["Chrome"]="$HOME/.config/google-chrome/Default/Bookmarks"
["Edge"]="$HOME/.config/microsoft-edge/Default/Bookmarks"
["Brave"]="$HOME/.config/BraveSoftware/Brave-Browser/Default/Bookmarks"
["Firefox"]="$HOME/.mozilla/firefox/*.default*/places.sqlite"
)
fi
backup_success=0
# 遍历所有浏览器
for browser in "${!BROWSERS[@]}"; do
pattern="${BROWSERS[$browser]}"
# 处理通配符(针对 Firefox 的随机 profile 名)
for file in $pattern; do
if [ -f "$file" ]; then
# 确定文件扩展名
ext="${file##*.}"
if [ "$ext" == "sqlite" ]; then
backup_name="${browser}_Bookmarks_${DATE_STAMP}.sqlite"
else
backup_name="${browser}_Bookmarks_${DATE_STAMP}.json"
fi
# 复制到临时位置
cp "$file" "$BACKUP_DIR/$backup_name"
# 压缩(节省空间)
gzip -f "$BACKUP_DIR/$backup_name" 2>/dev/null
echo "✅ $browser 书签备份完成:$BACKUP_DIR/${backup_name}.gz"
backup_success=1
break
fi
done
done
if [ $backup_success -eq 0 ]; then
echo "⚠️ 未找到任何浏览器的书签文件。"
echo " 请确认浏览器已安装并至少运行过一次。"
fi
# 清理旧备份
echo ""
echo "正在清理超过 $RETENTION_DAYS 天的旧备份..."
find "$BACKUP_DIR" -name "*.gz" -type f -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "*.json" -type f -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "*.sqlite" -type f -mtime +$RETENTION_DAYS -delete
echo "清理完成。"
exit 0
使用方法(macOS / Linux 终端):
- 将代码保存为
backup_bookmarks.sh。 - 赋予执行权限:
chmod +x backup_bookmarks.sh。 - 运行:
./backup_bookmarks.sh - 自动定时执行:
crontab -e添加一行(例如每天中午12点运行):0 12 * * * /full/path/to/backup_bookmarks.sh
通用跨平台 (Python 脚本)
如果你熟悉 Python,这是一个更优雅、跨平台且可扩展的方案。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
通用浏览器书签备份脚本 (Python 3)
支持 Windows, macOS, Linux
"""
import os
import sys
import shutil
import datetime
import platform
import glob
import gzip
# --- 配置区 ---
BACKUP_DIR = os.path.expanduser("~/BookmarkBackups")
RETENTION_DAYS = 30
COMPRESS = True # 是否压缩为 .gz
# --- 配置结束 ---
def get_browser_paths():
"""根据操作系统返回浏览器书签路径字典"""
system = platform.system()
home = os.path.expanduser("~")
paths = {}
if system == "Windows":
local_appdata = os.environ.get("LOCALAPPDATA", os.path.join(home, "AppData", "Local"))
paths = {
"Chrome": os.path.join(local_appdata, "Google", "Chrome", "User Data", "Default", "Bookmarks"),
"Edge": os.path.join(local_appdata, "Microsoft", "Edge", "User Data", "Default", "Bookmarks"),
"Brave": os.path.join(local_appdata, "BraveSoftware", "Brave-Browser", "User Data", "Default", "Bookmarks"),
}
elif system == "Darwin": # macOS
app_support = os.path.join(home, "Library", "Application Support")
paths = {
"Chrome": os.path.join(app_support, "Google", "Chrome", "Default", "Bookmarks"),
"Edge": os.path.join(app_support, "Microsoft Edge", "Default", "Bookmarks"),
"Brave": os.path.join(app_support, "BraveSoftware", "Brave-Browser", "Default", "Bookmarks"),
"Firefox": os.path.join(app_support, "Firefox", "Profiles"),
}
else: # Linux
config = os.path.join(home, ".config")
paths = {
"Chrome": os.path.join(config, "google-chrome", "Default", "Bookmarks"),
"Edge": os.path.join(config, "microsoft-edge", "Default", "Bookmarks"),
"Brave": os.path.join(config, "BraveSoftware", "Brave-Browser", "Default", "Bookmarks"),
"Firefox": os.path.join(home, ".mozilla", "firefox"),
}
return paths, system
def find_firefox_profile(firefox_path):
"""查找 Firefox 的默认 profile 中的 places.sqlite"""
if not os.path.isdir(firefox_path):
return None
# 查找所有以 .default 结尾的目录
profiles = glob.glob(os.path.join(firefox_path, "*.default*"))
for profile in profiles:
places_file = os.path.join(profile, "places.sqlite")
if os.path.isfile(places_file):
return places_file
return None
def backup_bookmarks():
"""主备份函数"""
# 创建备份目录
os.makedirs(BACKUP_DIR, exist_ok=True)
paths, system = get_browser_paths()
today = datetime.date.today().isoformat()
backup_count = 0
print(f"系统: {system}")
print(f"备份目录: {BACKUP_DIR}")
print(f"备份日期: {today}")
print("-" * 50)
for browser, path in paths.items():
source_file = None
if browser == "Firefox":
if find_firefox_profile(path):
source_file = find_firefox_profile(path)
else:
continue
else:
if os.path.isfile(path):
source_file = path
if not source_file:
print(f"⚠️ {browser}: 未找到书签文件")
continue
# 构建备份文件名
ext = os.path.splitext(source_file)[1] if browser == "Firefox" else ".json"
backup_name = f"{browser}_Bookmarks_{today}{ext}"
backup_path = os.path.join(BACKUP_DIR, backup_name)
try:
# 复制文件
shutil.copy2(source_file, backup_path)
# 如果启用了压缩
if COMPRESS:
with open(backup_path, 'rb') as f_in:
with gzip.open(backup_path + '.gz', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
os.remove(backup_path) # 删除未压缩的副本
print(f"✅ {browser}: 已压缩备份 -> {backup_name}.gz")
else:
print(f"✅ {browser}: 已备份 -> {backup_name}")
backup_count += 1
except Exception as e:
print(f"❌ {browser}: 备份失败 -> {e}")
# 清理旧备份
if backup_count > 0:
print("\n正在清理旧备份...")
cutoff = datetime.datetime.now() - datetime.timedelta(days=RETENTION_DAYS)
for filename in os.listdir(BACKUP_DIR):
filepath = os.path.join(BACKUP_DIR, filename)
if os.path.isfile(filepath):
mtime = datetime.datetime.fromtimestamp(os.path.getmtime(filepath))
if mtime < cutoff:
os.remove(filepath)
print(f" 已删除: {filename}")
print("清理完成。")
return backup_count
if __name__ == "__main__":
backup_bookmarks()
使用方法:
- 保存为
backup_bookmarks.py。 - 运行:
python3 backup_bookmarks.py - 自动化(以 Linux/macOS 为例):
crontab -e- 添加:
0 12 * * 1 /usr/bin/python3 /path/to/backup_bookmarks.py(每周一中午12点运行)
进阶建议
- 存储到云端:备份目录可以设置到网盘同步目录(如 OneDrive、iCloud、Google Drive、Dropbox),实现异地备份。
- 增量备份 vs 全量备份:上述脚本都是全量备份,书签文件通常很小(几MB),全量备份完全足够,如果将来文件很大,可以考虑使用
rsync或git进行增量管理。 - 多用户 / 多设备:
- Windows:将
$env:LOCALAPPDATA中的Default改为Profile 1、Profile 2等即可支持 Chrome 多用户。 - 将脚本部署在多台设备上,备份到同一个云同步文件夹即可集中管理。
- Windows:将
直接复制 Bookmarks 文件是最简单有效的方法,建议使用 Python 脚本(方案三)获得最佳跨平台兼容性和可维护性,如果你更习惯终端操作,Bash 脚本(方案二)在 Mac/Linux 上非常高效,Windows 用户用 PowerShell(方案一)最省心。