通过复制回原始文件、重命名文件并删除链接来撤消创建符号链接

通过复制回原始文件、重命名文件并删除链接来撤消创建符号链接

我使用 Windows 7 实用程序删除了每个字节的重复文件,并用符号链接替换它们,但后来我才知道我们公司域中不允许使用符号链接类型。我需要一种方法来撤消所做的所有更改,但该程序没有办法做到这一点。

是否可以编写某种脚本来查找链接、查找文件、删除链接并将文件复制回文件夹并重命名以匹配链接名称?或者也许有一款软件可以执行此操作?

感谢所有的帮助。

答案1

在这种情况下,制定一个精心规划并维护的备份策略确实会大有裨益。如果您的公司有这种情况,那就采用它吧。

你的做法是一种糟糕的节省空间的方法。考虑以下用例:

  1. 用户从 Deptx 共享复制文件以准备对其进行处理
  2. 你扔掉她的副本并创建指向原点的符号链接
  3. 她修改了其他人工作中仍需要的原件
  4. ...

如果您的存储资源匮乏,最好制定购买额外存储资源的业务计划。理想情况下,解决方案应支持块级重复数据删除。如果您现有的设备提供重复数据删除功能,您可以提交变更请求以获得批准以实施该功能 - 但这个时间已经过去了。

未来的注意事项。作为存储管理员,您需要通知企业何时需要扩展存储,通常是在存储容量达到一半时。当存储容量达到 70% 时,您可以开始每天拉响警报,直到他们分配预算。如果这没有发生,那么是时候在非常坦率的会议上告知他们,他们正在冒着业务风险。数据是现代商业的核心。


您可以使用以下命令识别所有符号链接:

C:\Users\user>dir /AL /S C:\ | find "SYMLINK"
07/14/2009  01:08 AM    <SYMLINKD>     All Users [C:\ProgramData]

# Only one result in on my Windows 7 host, and it's a system default.
# There are likely more in Windows Server OSs.
# Cmd Explained:
# /AL   A Lists file with attribute:L (Symlinks and dir junctions)
# /S    Do recursively
# C:\   Drive to scan

“All Users” 是符号链接“C:\Users\All Users”,其目标是“C:\ProgramData”。请注意,上述命令的输出并未提供您需要的符号链接的完整路径。

<<< 停止 >>> 如果符号链接的数量少于一千,则可能需要强烈考虑手动将其用目标文件替换。

您可以使用 NTFSLinksView。它似乎能够导出包含完整目标和符号链接路径的数据。http://www.nirsoft.net/utils/ntfs_links_view.html

获得这些值后,您可以使用此 Powershell 循环遍历它们。将 delim 修改为程序输出的内容。示例将空格设置为分隔符。如果使用逗号,则使用:','。确保 cvs 仅包含链接和目标数据。按此顺序。

注意:这不会保留默认的符号链接...

Import-CVS -Delim ' ' -Path input.cvs -Header Link,Target | ForEach-Object {
cmd /c rmdir $Link
Copy-Item $Target $Link
}

警告:此操作未经测试,可能会造成更大的损害……使用风险自负。如果之前没有备份,并且您已经得到此结果,请在继续操作之前进行备份。

答案2

此问题不是由域策略引起的。而是由 Windows 更新破坏了符号链接引起的。此主题帮助我了解了实际问题。卸载更新后,使用命令提示符执行以下命令:

fsutil 行为设置 SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1

我能够将顶部文件夹复制到本地 USB 驱动器并以原始名称检索原始文件,并撤消我造成的大部分“损害”。

对于那些卸载更新并使用上述命令的用户,您必须在两台机器上执行这两项操作才能使链接正常工作。我只能在我最初用于删除文件夹重复项的计算机上执行此操作。我甚至不确定我是否必须执行任一操作才能将文件复制到 USB 驱动器并让链接正常运行,以便我恢复原始文件。此时我已更正了问题,不需要继续进行我正在做的编码。

相关内容