前言
最近要实现考核层等等设想,所以我们遇到了一个问题:如何把几个游戏文件链接在一起?
最终我们得到了两种方案。
由于
CAUCraft
的游戏服务器实际部署在 Windows Server
上,所以本文的代码和实现思路都偏向于 Windows
系统的特性。方案一、BAT批处理指令
@Echo off
set /p source=请输入初始文件A的路径:
set /p destination=请输入目标文件B的路径:
:loop
copy /Y %source% %destination%
timeout /t 5 >nul
goto loop
代码1 Sync.bat
方案一的优势在于其利用了Windows自带的批处理指令,适用性好,不存在兼容问题。缺点在于,一是占用资源;二是批处理指令容易遇到终端卡死的问题;三是这种频繁复制的行为容易被认定为计算机病毒,触发杀毒软件的安全设定。
方案二、NTFS链接
由NTFS的存储原理,NTFS可以实现物理存储一份文件,而在文件的索引中制造出多个文件。(映射关系)
NTFS(新技术文件系统)是Windows操作系统中常用的文件系统之一,它支持多种文件链接方式,包括硬链接和符号链接(也称为快捷方式)。
- 硬链接(Hard Links):
- 硬链接是通过在文件系统中创建一个指向原始文件的新文件来实现的。
- 硬链接与原始文件共享相同的索引节点(inode),它们在文件系统中被视为相同的文件。
- 删除原始文件不会影响硬链接的可用性,只有当所有链接都被删除时,才会真正删除文件。
- 符号链接(Symbolic Links):
- 符号链接是一个特殊的文件,它包含指向另一个文件或目录的路径。
- 符号链接类似于快捷方式,可以链接到其他文件或目录,甚至可以跨越不同的文件系统。
- 删除原始文件或目录不会影响符号链接的可用性,但如果符号链接指向的目标文件或目录被删除,那么符号链接将变为无效。
要创建硬链接或符号链接,可以使用以下方法:
- 硬链接:
- 在命令提示符或PowerShell中使用
mklink
命令,例如:mklink /H <目标文件名> <原始文件名>
。
- 符号链接:
- 在命令提示符或PowerShell中使用
mklink
命令,例如:mklink /D <目标目录名> <原始目录名>
(创建目录符号链接)或mklink <目标文件名> <原始文件名>
(创建文件符号链接)。
根据上述内容,我们可以写两个Bat批处理指令来实现硬链接和符号链接。
硬链接代码如下:
@Echo off
:loop
echo 您随时可以多次输入ctrl+C终止这个程序。
set /p source=请输入初始文件A的路径:
set /p destination=请输入目标文件B的路径:
mklink /H %destination% %source%
timeout /t 5 >nul
goto loop
代码2 hardlink.bat
符号链接代码如下:
@Echo off
:loop
echo 您随时可以多次输入ctrl+C终止这个程序。
choice /c 12 /n /m "1-给文件夹做链接;2-给文件做链接"
set /p source=请输入初始文件A或者初始文件夹A的路径:
set /p destination=请输入目标文件B或者目标文件夹B的路径:
if errorlevel 1 (
mklink /D %destination% %source%
) else if errorlevel 2 (
mklink %destination% %source%
)
timeout /t 2 >nul
goto loop
代码3 symbolink.bat
注意符号链接的写法,因为文件夹链接和文件链接是不同的。需要管理员权限才能正确的执行命令。同时,符号链接文件可能存在一点问题,explorer会把链接生成的文件当作文件夹的“快捷方式”。所以建议文件还是用硬链接,兼容性会更好一点。