public static void CopyRecursiveHardlink(string source, string destination) {
if (File.GetAttributes(source).HasFlag(FileAttributes.Directory)) {
Directory.CreateDirectory(destination);
foreach (var dirPath in Directory.GetDirectories(source, "*", SearchOption.AllDirectories)) {
Directory.CreateDirectory(Path.Combine(destination, GetRelativePath(dirPath, source)));
}
foreach (var filePath in Directory.GetFiles(source, "*", SearchOption.AllDirectories)) {
Hardlink(filePath, Path.Combine(destination, GetRelativePath(filePath, source)), true);
}
} else {
Hardlink(source, destination, true);
}
}
}