
Есть ли способ создать жесткие ссылки для создания дубликата папки на ТОМ ЖЕ диске (отформатированном в NTFS)? Я хочу сделать что-то вроде этого: XCOPY E:\TEMP\SAMPLE1* E:\TEMP\SAMPLE2\ /s, но ВМЕСТО того, чтобы копировать файлы и использовать дополнительное место на диске, просто создайте жесткие ссылки на файлы.
Цель: в папке SAMPLE2 есть только несколько файлов, которые нам не нужны, но мы хотим сохранить их все в SAMPLE1. Папка SAMPLE2 в конечном итоге будет скопирована на другой диск.
ПРИМЕЧАНИЕ: общий объем содержимого SAMPLE1 составляет около 400 ГБ (с несколькими подпапками в нем), а каждый из файлов, которые мы собираемся исключить из SAMPLE2, составляет около 20–40 МБ каждый (их много, более 100 файлов, расположенных в различных подпапках).
Итак, есть ли способ сделать эквивалент XCOPY (команда выше), за исключением использования жестких ссылок, а затем удалить все ненужные файлы в SAMPLE2, прежде чем копировать их на внешний диск; затем удалить папку SAMPLE2.
решение1
Это немного хак, но:
- Сделайте обычную полную копию с помощью графического интерфейса. Копируйте/вставляйте и т. д. Наблюдайте, как исчезает место на диске.
- Запустите DupeGuru, указав источник в качестве ссылки, а дубликат — как «нормальный».
- Когда отчет будет готов, выберите "выбрать все > удалить" и отметьте опцию "создать заново как жесткие ссылки". Он также может создавать символические ссылки. Вы должны освободить немного места на диске. Я иногда использую это, чтобы подготовить папку для загрузки после удаления множества других файлов в структуре с помощью скрипта.
БОНУС: Работает на 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 году, но все еще обновляется и все еще работает так, как и ожидалось. Я считаю, что это самое удобное для пользователя решение.