本文目录导读:

可以的,通过脚本自动备份浏览器书签是一个很实用的需求,不同浏览器的书签文件位置和格式略有不同,但基本原理相似:找到书签文件 -> 复制到备份目录 -> 可选加入时间戳和压缩。
下面提供几个针对不同场景的实用脚本,你可以根据自己的操作系统和浏览器选择。
核心原理
大多数主流浏览器(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(方案一)最省心。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播