Как скопировать папки на один диск NTFS с помощью жестких ссылок?

Как скопировать папки на один диск NTFS с помощью жестких ссылок?

Есть ли способ создать жесткие ссылки для создания дубликата папки на ТОМ ЖЕ диске (отформатированном в NTFS)? Я хочу сделать что-то вроде этого: XCOPY E:\TEMP\SAMPLE1* E:\TEMP\SAMPLE2\ /s, но ВМЕСТО того, чтобы копировать файлы и использовать дополнительное место на диске, просто создайте жесткие ссылки на файлы.

Цель: в папке SAMPLE2 есть только несколько файлов, которые нам не нужны, но мы хотим сохранить их все в SAMPLE1. Папка SAMPLE2 в конечном итоге будет скопирована на другой диск.

ПРИМЕЧАНИЕ: общий объем содержимого SAMPLE1 составляет около 400 ГБ (с несколькими подпапками в нем), а каждый из файлов, которые мы собираемся исключить из SAMPLE2, составляет около 20–40 МБ каждый (их много, более 100 файлов, расположенных в различных подпапках).

Итак, есть ли способ сделать эквивалент XCOPY (команда выше), за исключением использования жестких ссылок, а затем удалить все ненужные файлы в SAMPLE2, прежде чем копировать их на внешний диск; затем удалить папку SAMPLE2.

решение1

Это немного хак, но:

  1. Сделайте обычную полную копию с помощью графического интерфейса. Копируйте/вставляйте и т. д. Наблюдайте, как исчезает место на диске.
  2. Запустите DupeGuru, указав источник в качестве ссылки, а дубликат — как «нормальный».
  3. Когда отчет будет готов, выберите "выбрать все > удалить" и отметьте опцию "создать заново как жесткие ссылки". Он также может создавать символические ссылки. Вы должны освободить немного места на диске. Я иногда использую это, чтобы подготовить папку для загрузки после удаления множества других файлов в структуре с помощью скрипта.

БОНУС: Работает на Mac, Windows и Linux. Здорово!https://dupeguru.voltaicideas.net/ введите описание изображения здесь

решение2

Никакого стороннего программного обеспечения не требуется. Это можно сделать с помощьюPowerShell. Вот функция с поддержкой конвейера, которая принимает исходный путь ($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 основана на графическом интерфейсе, а встроенного графического решения для создания символических ссылок нет. Кроме того, командная строка тоже усложняла задачу. (Если вы используете Linux, это легко и прямолинейно через терминал, а некоторые графические файловые менеджеры, такие как GNOME Commander, также упрощают задачу через графический интерфейс.)

Итак... чтобы выполнить вышеуказанное решение, «легким» способом будет загрузить плагин и файл поддержки (при необходимости; прочитайте примечания к загрузке)здесь Это добавит опции символической ссылки в меню правой кнопки мыши. Вам нужно выбрать "Pick Link Source" для "копирования" каталога, затем "Drop As > Hardlink Clone" для вставки. Работайте в связанном каталоге так, как хотите, удаляя файлы (ссылки) и т. д. Затем просто скопируйте и вставьте его (НЕ выбирайте ссылку и не перетаскивайте как) куда хотите, и вуаля, ярлыки скопированы как файлы!

Наконец, удалите связанную папку, и все будет так, как будто ничего не произошло.

Плагин, кажется, работает отлично. Попробуйте! Только будьте осторожны и делайте ТОЛЬКО жесткие ссылки (никаких мягких ссылок или переходов) и убедитесь, что работаете со ссылками, а не с реальными файлами!

Теперь для тех, кто упомянет mklink, вот с чем я столкнулся при разработке этого ответа. Использование mklink через командную строку, запущенную от имени администратора (найдите CMD, щелкните правой кнопкой мыши и запустите от имени администратора) ДОЛЖНО работать так же... Но это не сработало для меня (и МНОГИХ других, если вы поищете). Я получил отказ в доступе даже после изменения привилегий через secpol.msc. Похоже, это распространенная проблема.

решение4

Расширение оболочки ссылки

Эта утилита добавляет расширение оболочки в контекстное меню проводника Windows, позволяя создавать файлы методом перетаскивания.жесткие ссылки,перекресткиисимволические ссылки. Он действительно старый, впервые создан в 1999 году, но все еще обновляется и все еще работает так, как и ожидалось. Я считаю, что это самое удобное для пользователя решение.

Пример изображения

Связанный контент