Копирование с сохранением структуры жёстких ссылок
Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik
- LonerD
- Сообщения: 1174
- Зарегистрирован: Вт янв 04, 2011 03:56
- Откуда: Макеевка
- Контактная информация:
Копирование с сохранением структуры жёстких ссылок
Цель - копирование файлов с сохранением жёстких ссылок.
Проще объяснить на примере.
На диске D имеются три файла (на самом деле файлов и каталогов/подкаталогов гораздо больше, но для примера достаточно минимум).
d:\file1.ext
d:\file2.ext
d:\file3.ext
d:\file1.ext и d:\file2.ext являются жёсткими ссылками друг на друга (то есть физически это один файл).
d:\file3.ext побайтово совпадает с d:\file1.ext, но физически - это два разных независимых файла.
Цель - переместить все эти файлы на диск E:, получив ту же структуру.
То есть в итоге:
e:\file1.ext и e:\file2.ext - жёсткие ссылки друг на друга
e:\file3.ext - просто отдельный файл.
Существует несколько утилит, которые заменяют в целевом каталоге все одинаковые файлы на жёсткие ссылки. Но они заменяют ВСЕ файлы, а нужно на целевом диске сделать жёсткими ссылками только те файлы, которые являлись таковыми на исходном диске.
Проще объяснить на примере.
На диске D имеются три файла (на самом деле файлов и каталогов/подкаталогов гораздо больше, но для примера достаточно минимум).
d:\file1.ext
d:\file2.ext
d:\file3.ext
d:\file1.ext и d:\file2.ext являются жёсткими ссылками друг на друга (то есть физически это один файл).
d:\file3.ext побайтово совпадает с d:\file1.ext, но физически - это два разных независимых файла.
Цель - переместить все эти файлы на диск E:, получив ту же структуру.
То есть в итоге:
e:\file1.ext и e:\file2.ext - жёсткие ссылки друг на друга
e:\file3.ext - просто отдельный файл.
Существует несколько утилит, которые заменяют в целевом каталоге все одинаковые файлы на жёсткие ссылки. Но они заменяют ВСЕ файлы, а нужно на целевом диске сделать жёсткими ссылками только те файлы, которые являлись таковыми на исходном диске.
Через API читается элементарно.Flasher писал(а):Способ-то понятен, сейчас надо понять как читать индекс.
В моем посте было без ссылки. И потом, прочти первый пост, автор ищет не программы, которые заменяют копии файлов жесткими ссылками, а программы, дублирующие структуру папок с сохранением жестких копий в её пределах. Вот таких я не видел.Flasher писал(а):MVV писал(а):Ни разу таких не видел.
Автор написал
Он не писал, что ищет программы. Программы у нас вот здесь обсуждаются, так на всякий случай.LonerD писал(а):Существует несколько утилит, которые...
Предлагаешь подключать DynamicWrapperX?MVV писал(а):Через API читается элементарно.
- LonerD
- Сообщения: 1174
- Зарегистрирован: Вт янв 04, 2011 03:56
- Откуда: Макеевка
- Контактная информация:
Без разницы - будет ли это родной функционал какой-либо программы (если таковая вдруг существует) или скрипт.Он не писал, что ищет программы.
Скрипт может быть как минимум двух вариантов:
1. Копирует/перемещает файлы и в процессе копирования/перемещения отслеживает наличие жёстких ссылок, сразу же их создавая на целевом диске.
2. Вначале просто копируются все файлы с одного диска на другой, а потом скрипт анализирует исходный и целевой диски(каталоги на дисках) и переносит структуру жёстких ссылок, заменяя в целевом соответствующие файлы на жёсткие ссылки.
Самый быстрый и корректный вариант - копировать файл за файлом, получая их индексы с помощью функции GetFileInformationByHandle и добавляя пары "оригинальный индекс-целевой путь" в упорядоченный по индексам массив, поддерживая упорядоченность. При переходе к очередному файлу проверять его индекс на присутствие в массиве бинарным поиском и, если индекс найден, вместо копирования файла создавать жесткую копию для файла, путь к которому соответствует индексу из пары. Но как это сделать с помощью скрипта, понятия не имею, возможно справится упомянутый DynamicWrapperX.
- LonerD
- Сообщения: 1174
- Зарегистрирован: Вт янв 04, 2011 03:56
- Откуда: Макеевка
- Контактная информация:
Всем спасибо. Запрошенный функционал найден в Link Shell Extension (опция Smart Copy). На первый взгляд - самое оно.