透過複製回原始檔案、重新命名檔案並刪除連結來撤銷建立符號連結

透過複製回原始檔案、重新命名檔案並刪除連結來撤銷建立符號連結

在我知道符號連結類型在我們的公司網域中是不允許的之前,我使用 Windows 7 實用程式刪除了每個位元組的重複文件,並用符號連結替換它們。我需要一種方法來撤消所做的所有更改,但程式沒有辦法做到這一點。

是否可以編寫某種腳本來查找連結、查找文件、刪除連結並將文件複製回資料夾並重命名以匹配連結名稱?或者也許有一個軟體可以做到這一點?

感謝您的任何和所有幫助。

答案1

在這種情況下,擁有一個精心規劃和維護的備份策略確實會帶來回報。如果您的公司是這種情況,請使用它。

你所做的是節省空間的糟糕方法。考慮以下用例:

  1. 使用者從 Deptx 共用複製檔案以準備處理
  2. 你扔掉她的副本並創建指向起源的符號鏈接
  3. 她修改了其他人的工作仍然需要的原件

如果您的儲存空間不足,最好起草一份購買額外儲存空間的商業計劃。理想的解決方案是支援區塊級重複資料刪除。如果您現有的裝置提供重複資料刪除功能,您可以提交變更請求以獲得批准來實施它 - 但時間已經過去了。

給未來的註釋。作為存儲管理員,您需要通知業務何時需要擴展存儲,通常是在存儲空間大約已滿的時候。當容量達到 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

“所有使用者”是符號連結“C:\Users\All Users”,其目標是“C:\ProgramData”。請注意,上述命令的輸出並未提供您所需的符號連結的完整路徑。

<<< STOP >>> 如果符號連結的數量少於一千,則可能值得強烈考慮手動將其替換為目標檔案。

您可以使用 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 驅動器並讓連結正常工作以便我取回原始文件。此時我修正了問題,並且不需要進一步進行我正在做的編碼。

相關內容