有没有办法创建硬链接以在同一驱动器(NTFS 格式)上创建文件夹的副本?我希望执行类似这样的操作:XCOPY E:\TEMP\SAMPLE1* E:\TEMP\SAMPLE2\ /s 但实际上不是复制文件并使用额外的驱动器空间,而是创建指向文件的硬链接。
目标:SAMPLE2 文件夹中只有少数文件我们不需要,但希望将它们全部保留在 SAMPLE1 中。文件夹 SAMPLE2 最终将被复制到另一个驱动器。
注意:SAMPLE1 的总内容约为 400GB(其中包含多个子文件夹),而我们要从 SAMPLE2 中排除的每个文件约为 20-40MB(有很多,100 多个文件,位于各个子文件夹中)。
那么,除了使用硬链接之外,有没有办法执行与 XCOPY(上面的命令)等效的操作,然后我们去删除 SAMPLE2 中我们不需要的所有文件,然后再将它们复制到外部驱动器;然后删除 SAMPLE2 文件夹。
答案1
这有点像 hack,但是:
- 使用 GUI 进行常规完整复制。复制/粘贴等。观察磁盘空间消失。
- 运行 DupeGuru,将源设置为参考,将重复项设置为“正常”
- 报告完成后,执行“全选 > 删除”,然后勾选“重新创建为硬链接”选项。它也可以创建符号链接。您应该恢复一些磁盘空间。我有时会使用这个来准备一个文件夹,在使用脚本删除结构中的许多其他文件后上传。
额外福利:它可以在 Mac、Windows 和 Linux 上运行。太棒了!https://dupeguru.voltaicideas.net/
答案2
无需第三方软件。这可以通过以下方式实现电源外壳。这是一个启用管道的函数,它采用源路径 ($Path) 和“镜像”路径 ($MirrorPath)。它使用源路径和子文件夹中文件的硬链接填充镜像路径,以匹配源子文件夹,这些子文件夹也是递归填充的。
Function Mirror-Path {
Param(
[Parameter(Mandatory,ValueFromPipeline,Position=0)]
[String[]]
$Path,
[Parameter(Mandatory,Position=1)]
[String]
$MirrorPath
)
Begin{
If ( ! ( Test-Path $MirrorPath )) {
mkdir $MirrorPath -Force | out-null
}
}
Process{
ForEach ( $Target in $Path ) {
If ( Test-Path $Target ) {
Resolve-Path $Target | gci -File | ForEach {
New-item -ItemType Hardlink -Path $MirrorPath -Name $_.Name -Target $_.FullName | out-null
}
Resolve-Path $Target | gci -Directory | ForEach {
Mirror-Path $_.FullName ( Join-Path $MirrorPath $_.Name )
}
}
Else {
Echo "'$Target' is not a valid path."
}
}
}
End {}
}
答案3
理论上这很简单。您需要创建目录的符号链接,它将完全按照您的意愿执行操作。它将复制看起来和行为都像真实文件的快捷方式给用户和程序。然后,您可以删除不需要的符号链接,这只会删除链接;然后您可以像平常一样复制其余的“文件”(真正的链接),它将复制实际的文件。
但是 Windows 是基于 GUI 的,并且没有内置的 GUI 解决方案来创建符号链接。此外,命令提示符也使其变得困难。(如果您使用 Linux,则通过终端可以轻松直接地进行操作,并且某些图形文件管理器(如 GNOME Commander)也使通过 GUI 进行操作变得容易。)
因此...要执行上述解决方案,“简单”的方法是下载插件和支持文件(如果需要;阅读下载说明)这里 这将在您的右键菜单中添加符号链接选项。您需要的是“选择链接源”来“复制”目录,然后“拖放到硬链接克隆”来粘贴。在链接目录中按您想要的方式删除文件(链接)等。然后将其常规复制并粘贴(不是选择链接并拖放到)到您想要的任何位置,瞧,快捷方式就被复制为文件了!
最后,删除链接文件夹,就像什么都没有发生一样。
该插件似乎效果很好。试试吧!只需小心,只创建硬链接(无软链接或连接),并确保使用链接而不是实际文件!
现在,对于那些会提到 mklink 的人,以下是我在开发此答案时遇到的问题。通过以管理员身份运行的命令提示符使用 mklink(搜索 CMD 并右键单击并以管理员身份运行)应该可以正常工作...但对我来说却不是这样(如果你搜索的话,还有很多其他人也是如此)。即使通过 secpol.msc 修改权限后,我的访问仍然被拒绝。这似乎是一个普遍存在的问题。
答案4
链接外壳扩展
此实用程序向 Windows 资源管理器上下文菜单添加了一个 shell 扩展,允许拖放创建硬链接,路口和符号链接。它确实很老了,最早创建于 1999 年,但仍在更新,并且仍按预期运行。我相信这是最用户友好的解决方案。