利用云同步盘实现多台电脑部分配置同步问题(利用云同步盘实现多台电脑部分配置同步问题怎么解决)

小编:迷魂雪 更新时间:2022-10-15

我们经常会在公司,个人甚至更多环境不同的电脑进行切换,当然,也存在重装系统、换电脑等问题。而在每次更换之后,都会进行一次环境配置。或者在某台电脑上修改了部分配置而其他电脑又需要再次配置一次。

尤其是类似于 ssh 密钥等配置,每次不光是重新生成一份就行了,还需要去各平台新增,及其麻烦。

当然,使用云盘拷贝备份的方式可行,但是每次修改都需要再次备份,会存在遗忘的情况,有办法让配置自动同步么?

答案是有的!

我们可以利用云同步盘(如 OneDrive)让配置文件自动同步,同时利用文件链接如window的mklink创建文件链接。实际文件存放在云同步盘中,而系统配置中的文件使用链接的方式。

这样不管是修改哪个文件,源文件都会被修改然后被云同步盘自动同步。

例 ssh 下的 config 文件创建文件链接(windows):

@rem 在云盘中的config所在文件夹 mklink config %USERPROFILE%/.ssh/config

这样我们不管是修改云盘中的文件还是C盘下的文件,源文件都会被修改同步。

但是这样我们需要在每台电脑上都进行一次文件链接创建。

所以这里提供一个脚本直接进行链接创建,想来看看目录结构以及说明:

每个目录对应系统中某个文件夹,具体对应的文件夹根目录为当前文件中的 .localpath 的内容。映射时会把当前目录下的所有文件分别链接到 .localpath 所指定的目录并且一一对应。

-- settings/ -- userprofile/ # C 盘目录下 user/用户名 下面配置 -- .ssh/ -- config -- id_rsa -- id_rsa.pub -- .gitconfig -- .npmrc -- .yarnrc -- .localpath # 文件内容:%USERPROFILE%,即系统盘中的"user/用户名"目录 -- others/ # 其他配置 -- .localpath # others 文件所对应的系统目录位置 -- init.bat # 创建软链

这样在执行 settings/init.bat 就会吧 userprofile 文件夹下面的所有文件分别映射到 %USERPROFILE% 对应的文件下,即创建 .npmrc、.yarnrc、.gitconfig、以及 .ssh 下的所有配置进行映射同步。

这样无论 修改 哪里的文件,同步盘中的内容都会跟着更新并同步。同时另外一台有做链接映射的电脑打开的时候同步盘自动更新后,系统配置文件也就自动更新了!

而在重装系统、新增电脑的机器上把同步盘装上同步下来后执行 init.bat 就OK了。

当然,如果是跨平台的操作系统,可以提供更多的配置,如 init.sh 等。

这里附以下 init.bat 文件:

@echo off setlocal enabledelayedexpansion @echo off :: 同步设置的根路径 set SyncSettingsPath=%OneDrive%\settings :: .localpath的文件名 set LocalPathName=.localpath :: 遍历当前目录所有文件夹 for /f %%n in ('dir %SyncSettingsPath% /b /a:d') do ( if exist %SyncSettingsPath%\%%n\%LocalPathName% ( :: 读取.localpath for /f %%i in ('type %SyncSettingsPath%\%%n\%LocalPathName%') do set LocalPathContent=%%i :: 转换.localpath内容中的变量 for /f %%i in ('echo !LocalPathContent!') do ( :: 递归遍历当前文件夹下非.localpath的文件 for /f %%f in ('dir %SyncSettingsPath%\%%n /s /b /a:-d ^| find /v "%LocalPathName%"') do ( set CurrentSyncFilePath=%%f set CurrentLocalFilePath=!CurrentSyncFilePath:%SyncSettingsPath%\%%n=%%i! if exist !CurrentLocalFilePath! del !CurrentLocalFilePath! mklink !CurrentLocalFilePath! !CurrentSyncFilePath! ) ) ) )