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

电脑教程
电脑教程
电脑教程
4320
文章
0
评论
2023年1月2日12:03:50 电脑教程 阅读 6,461

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

尤其是类似于 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!
)
)
)
)

以上内容来源于网络,由“WiFi之家网”整理收藏!

相关推荐