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

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

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

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

3
J. Chin 20 Авг 2013 в 04:50

6 ответов

Расширение Link Shell

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

Example image

0
lodewykk 8 Янв 2022 в 22:35

Это просто в теории. Вам нужно создать символическую ссылку на каталог(и), который будет делать ТОЧНО то, что вы хотите. Он копирует ярлыки, которые выглядят и действуют как настоящие файлы для пользователя и программ. Затем вы можете удалить символические ссылки, которые вам не нужны, что приведет к удалению только ссылок; затем вы копируете остальные «файлы» (на самом деле ссылки), как обычно, и он копирует фактические файлы.

Но Windows основана на графическом интерфейсе, и нет встроенного графического решения для создания символических ссылок. Кроме того, командная строка также усложнила задачу. (Если вы используете Linux, это легко и просто сделать через терминал, а некоторые графические файловые менеджеры, такие как GNOME Commander, также упрощают работу с графическим интерфейсом.)

Оооо... для выполнения вышеуказанного решения "простой" способ - загрузить плагин и файл поддержки (при необходимости; прочитать примечания по загрузке) здесь Это добавит параметры символической ссылки в контекстное меню. Вам нужны «Выбрать источник ссылки», чтобы «скопировать» каталог, затем «Отбросить как> Клонирование жесткой ссылки», чтобы вставить. Работайте в связанном каталоге, удаляя файлы (ссылки) и тому подобное. Затем просто скопируйте и вставьте его (НЕ выберите ссылку и перетащите как) куда угодно, и вуаля, ярлыки скопированы как файлы!

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

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

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

1
user 20 Авг 2013 в 11:42
Мне нужно решение, которое фактически создает папки и жестко связывает все файлы в папках. Причина в том, что мне нужно удалить ненужные ФАЙЛЫ среди нужных из папок. Я пытался создать жесткие ссылки вручную для каждой папки в командной строке, но это не дало мне того, что мне было нужно. Я могу использовать XCOPY для создания пустого дерева папок, но вручную создавать жесткие ссылки на каждый файл слишком сложно.
 – 
J. Chin
20 Авг 2013 в 16:06
Похоже, вы не пробовали мое решение. Вы перешли по ссылке? Также в моем решении упоминается, что использование командной строки не будет работать, и НЕ использовать ее.
 – 
Damon
20 Авг 2013 в 20:06
Дэймон, спасибо, но нет, мы не пробовали твой. У меня есть более одного набора этих файлов, которые нам нужны для этого, и у меня есть люди, не являющиеся техническими специалистами, которые делают их позже. Я не хотел, чтобы они случайно сделали кучу программных ссылок, а потом все испортили. Сам попробую позже, когда будет время. Спасибо.
 – 
J. Chin
20 Авг 2013 в 23:38

Стороннее программное обеспечение не требуется. Это можно сделать с помощью 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 {}
}
1
Keith Miller 16 Авг 2020 в 21:38

Вроде нашел "взлом" метод получения результатов, которые мы хотим на данный момент.

Существует бесплатная утилита под названием DirectorySlicer для Windows, которая помогает нам "разбивать" (на самом деле она делает "копии"). файлов в каталоги заданного размера. Бонусная функция этой утилиты заключается в том, что она использует «жесткие ссылки», если целевой диск совпадает с исходным и имеет файловую систему NTFS.

Итак, вот «взлом», который мы только что сделали. Мы указали новое место назначения и указали размер целевого каталога 1 ТБ, что фактически больше, чем весь источник, поэтому создается один каталог. Через несколько секунд у нас есть куча каталогов с жесткими ссылками на исходные файлы, как раз то, что мы хотели (почти это создает дополнительный уровень каталога, но это можно легко исправить).

0
J. Chin 20 Авг 2013 в 18:25

Это немного взломать, но:

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

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

0
Tomachi 15 Авг 2020 в 03:40

Это можно сделать с помощью cp или rsync - например, из широко используемой коллекции MSYS2 (cp входит в установку по умолчанию. Добавьте rsync: pacman -S rsync )

Простая копия файлового дерева с файлами в качестве жестких ссылок:

cp -al SRCDIR DSTDIR

Это сохраняет временные метки и т. д., включая разрешения NTFS и альтернативные потоки данных — cp не знает о них, поскольку они хранятся в MFT, чьи записи являются общими для жестких ссылок.

Обновление с помощью rsync в качестве жестких ссылок

rsync -a --link-dest=SRCDIR_RD SRCDIR/ DSTDIR

При использовании абсолютных путей SRCDIR_RD может быть равен SRCDIR.
При использовании относительных путей SRCDIR_RD должен быть путем к SRCDIR относительно DSTDIR.
Абсолютные пути для rsync (в отличие от cp, который понимает обычные буквы дисков) до сих пор должны быть указаны в старом стиле MSYS (например, /C/sub/dir или /C\sub\dir вместо C:\sub\dir)

0
kxr 1 Дек 2020 в 17:08