在一个仓库里设置好了主题、快捷键那些,但是去到其他的仓库又得重新设置一遍,其他什么方法可以复制或者同步吗?
把 .obsidian 目录复制过去就行了,快捷键、主题、插件这些都在 .obsidian 目录下
1 个赞
好的,谢谢!
1 个赞
手动同步
Obsidian中的配置插件样式等,都是保存在.obnsidian文件夹下的,我们只需要让这个文件夹之间同步就能解决上述的问题了。你可以每次修改配置后,手动复制.obsidian
文件。
自动同步
建立一个专门存放Obsidian配置的文件夹(我将它称为中心配置文件),你也可以使用已有的配置文件作为中心配置。
接着使用软连接进行关联,命令示例:
mklink /J "E:\Obsidian Vault\开发知识库\.obsidian" "E:\Obsidian Vault\.obsidian"
mklink /J "E:\Obsidian Vault\TestConfig\.obsidian" "E:\Obsidian Vault\.obsidian"
一键自动配置
我编写了一个脚本,可以一键自动进行软连接,需要你自己调整一下配置。
import os
import shutil
import subprocess
import sys
from ctypes import windll
# ------------------- 用户配置区域 -------------------
SYNC_VAULTS = ["待办与备忘", "感悟与心得", "开发知识库"]
EXCLUDE_FILES = ["workspace.json", "workspaces.json"]
CONFIG_CENTER = ".obsidian"
# ---------------------------------------------------
def require_admin():
"""自动请求并获取管理员权限"""
if os.name == 'nt':
try:
# 首次检测权限
if windll.shell32.IsUserAnAdmin() == 0:
print("🔒 正在请求管理员权限...")
# 生成提权后的新进程
windll.shell32.ShellExecuteW(
None, # 无父窗口
"runas", # 请求提升权限
sys.executable, # Python解释器路径
f'"{sys.argv[0]}"', # 当前脚本路径(带引号处理空格)
None, # 工作目录保持默认
1 # 显示窗口
)
# 终止原始非特权进程
sys.exit()
except Exception as e:
print(f"❌ 权限请求失败: {str(e)}")
sys.exit(1)
def sync_config():
base_dir = os.getcwd()
config_center = os.path.join(base_dir, CONFIG_CENTER)
# 验证中心配置目录
if not os.path.exists(config_center):
print(f"❌ 错误:中心配置目录 {CONFIG_CENTER} 不存在")
return False
for vault in SYNC_VAULTS:
vault_path = os.path.join(base_dir, vault)
target_dir = os.path.join(vault_path, ".obsidian")
# 跳过不存在的仓库
if not os.path.exists(vault_path):
print(f"⏩ 跳过不存在的仓库:{vault}")
continue
try:
# 清理旧配置
if os.path.exists(target_dir):
if os.path.islink(target_dir) or os.path.isfile(target_dir):
os.remove(target_dir)
else:
shutil.rmtree(target_dir)
print(f"🗑️ 已清除旧配置:{vault}")
# 创建新目录结构
os.makedirs(target_dir, exist_ok=True)
# 创建符号链接
for item in os.listdir(config_center):
if item in EXCLUDE_FILES:
continue
src_path = os.path.join(config_center, item)
dest_path = os.path.join(target_dir, item)
link_cmd = f'mklink /D "{dest_path}" "{src_path}"' if os.path.isdir(
src_path) else f'mklink "{dest_path}" "{src_path}"'
# 执行系统命令
subprocess.run(link_cmd, shell=True, check=True)
print(f"🔗 已创建链接:{vault}/{item}")
except Exception as e:
print(f"❌ 处理仓库 {vault} 失败:{str(e)}")
continue
return True
if __name__ == "__main__":
require_admin()
print("=" * 50)
print("Obsidian 配置同步工具".center(50))
print("=" * 50)
try:
if sync_config():
print("✅ 同步操作成功完成")
else:
print("⚠️ 同步操作未完全完成")
except Exception as e:
print(f"‼️ 发生未捕获的异常:{str(e)}")
# 保持窗口打开
if sys.platform == "win32":
os.system("pause")