如何使用硬連結複製同一 NTFS 磁碟機上的資料夾?

如何使用硬連結複製同一 NTFS 磁碟機上的資料夾?

有沒有辦法建立硬連結以在相同磁碟機(NTFS 格式)上建立資料夾的副本?我想做這樣的事情: XCOPY E:\TEMP\SAMPLE1* E:\TEMP\SAMPLE2\ /s 但不是實際複製檔案並使用額外的磁碟機空間,而是建立到檔案的硬連結。

目標:SAMPLE2 資料夾中只有少數我們不需要的文件,但希望將所有文件保留在 SAMPLE1 中。資料夾 SAMPLE2 最終將複製到另一個磁碟機。

注意:SAMPLE1 的總內容約為 400GB(其中包含多個子資料夾),我們要從 SAMPLE2 中排除的每個文件約為 20-40MB(有很多,100 多個文件,位於不同的位置)子資料夾)。

那麼,除了使用硬連結之外,有沒有一種方法可以執行與 XCOPY(上面的命令)等效的操作,然後我們刪除 SAMPLE2 中不需要的所有文件,然後再將它們複製到外部驅動器;然後刪除 SAMPLE2 資料夾。

答案1

這有點像駭客,但是:

  1. 使用 GUI 製作常規完整副本。複製/貼上等。
  2. 運行 DupeGuru,將來源設為參考,並將 dupe 設為“正常”
  3. 報告完成後,執行「全選>刪除」並勾選「重新建立為硬連結」選項。它還可以做符號連結。您應該恢復一些磁碟空間。我有時會用它來準備一個資料夾,以便在使用腳本刪除結構中的許多其他檔案後上傳。

獎勵:它可以在 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 輕鬆實現。)

所以..要執行上述解決方案,「簡單」的方法是下載插件和支援檔案(如果需要;請閱讀下載說明)這裡 這會將符號連結選項新增到您的右鍵選單中。您想要的是「選擇連結來源」來「複製」目錄,然後「Drop As > Hardlink Clone」來貼上。當您想要刪除檔案(連結)等時,請在連結目錄中工作。然後定期將其複製並貼上(不要選擇連結並貼上為)到您想要的任何位置,瞧,快捷方式複製為文件!

最後,刪除連結的資料夾,就好像什麼事都沒發生一樣。

該插件似乎工作得很好。試試看!請注意僅建立硬連結(無軟連結或連接),並確保使用連結而不是真實檔案!

現在對於那些提到 mklink 的人來說,這是我在開發這個答案時遇到的情況。透過以管理員身份運行的命令提示字元(搜尋CMD 並右鍵單擊並以管理員身份運行)使用mklink 應該工作相同......但它不適合我(以及許多其他人,如果你搜尋) 。即使透過 secpol.msc 修改權限後,我的存取仍被拒絕。這似乎是一個普遍存在的問題。

答案4

連結外殼擴展

此實用程式將 shell 擴充功能新增至 Windows 資源管理器上下文功能表中,從而可以拖曳/放置建立硬連結,路口符號連結。它確實很舊,最初創建於 1999 年,但仍在更新並且仍然按預期工作。我相信這是最用戶友好的解決方案。

範例影像

相關內容