Копирование с сохранением структуры жёстких ссылок

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Копирование с сохранением структуры жёстких ссылок

Сообщение LonerD »

Цель - копирование файлов с сохранением жёстких ссылок.

Проще объяснить на примере.
На диске 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 - просто отдельный файл.

Существует несколько утилит, которые заменяют в целевом каталоге все одинаковые файлы на жёсткие ссылки. Но они заменяют ВСЕ файлы, а нужно на целевом диске сделать жёсткими ссылками только те файлы, которые являлись таковыми на исходном диске.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Ни разу таких не видел. Это надо составить список файлов в исходной папке и их индексов, а потом в папке назначения заменить жесткими ссылками файлы, индексы которых в исходной папке встречаются более 1 раза.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Способ-то понятен, сейчас надо понять как читать индекс.
MVV писал(а):Ни разу таких не видел.
:lol:
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Flasher писал(а):Способ-то понятен, сейчас надо понять как читать индекс.
Через API читается элементарно.
Flasher писал(а):
MVV писал(а):Ни разу таких не видел.
:lol:
В моем посте было без ссылки. И потом, прочти первый пост, автор ищет не программы, которые заменяют копии файлов жесткими ссылками, а программы, дублирующие структуру папок с сохранением жестких копий в её пределах. Вот таких я не видел.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Автор написал
LonerD писал(а):Существует несколько утилит, которые...
Он не писал, что ищет программы. Программы у нас вот здесь обсуждаются, так на всякий случай.
MVV писал(а):Через API читается элементарно.
Предлагаешь подключать DynamicWrapperX?
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Он не писал, что ищет программы.
Без разницы - будет ли это родной функционал какой-либо программы (если таковая вдруг существует) или скрипт.
Скрипт может быть как минимум двух вариантов:
1. Копирует/перемещает файлы и в процессе копирования/перемещения отслеживает наличие жёстких ссылок, сразу же их создавая на целевом диске.
2. Вначале просто копируются все файлы с одного диска на другой, а потом скрипт анализирует исходный и целевой диски(каталоги на дисках) и переносит структуру жёстких ссылок, заменяя в целевом соответствующие файлы на жёсткие ссылки.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Самый быстрый и корректный вариант - копировать файл за файлом, получая их индексы с помощью функции GetFileInformationByHandle и добавляя пары "оригинальный индекс-целевой путь" в упорядоченный по индексам массив, поддерживая упорядоченность. При переходе к очередному файлу проверять его индекс на присутствие в массиве бинарным поиском и, если индекс найден, вместо копирования файла создавать жесткую копию для файла, путь к которому соответствует индексу из пары. Но как это сделать с помощью скрипта, понятия не имею, возможно справится упомянутый DynamicWrapperX.
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Всем спасибо. Запрошенный функционал найден в Link Shell Extension (опция Smart Copy). На первый взгляд - самое оно.
Ответить