View previous topic :: View next topic |
Author |
Message |
HankHank
Joined: 15 Apr 2010 Posts: 39
|
(Separately) Posted: Wed Jan 26, 2022 00:20 Post subject: Поменять Junction на относительные символьные ссылки |
|
|
Доброго времени суток.
Есть фонотека на нескольких USB HDD, которой не один десяток лет.
В ней в изобилии используются точки соединения (Junction). Так было легче структурировать музыку.
Изначально предполагалось работать с этими дисками, монтируя их каждый раз на букву “H:”.
Однако, надоело заморачиваться с монтированием.
Может, кто-то сталкивался с подобной задачей.
Хотелось бы найти способ автоматизировать замену точек соединения на относительные символьные ссылки.
Всё равно, с помощью TC или как-то иначе.
Спасибо. |
|
Back to top |
|
|
HankHank
Joined: 15 Apr 2010 Posts: 39
|
(Separately) Posted: Wed Jan 26, 2022 16:22 Post subject: |
|
|
Найти все точки соединения в TC понятно, как:
Поиск файлов – вкладка Плагины.
У меня есть оба-два плагина: ntlinks и nl_info.
По обоим поиск получается.
В ntlinks: Тип объекта = Точка соединения
В nl_info: Тип символической ссылки (расш) = Junction
Можно получить простыню с интересующими ссылками из комстроки:
dir /AL /S H:\ | find "JUNCTION"
Что дальше делать?
Руками всё лопатить немыслимо.
По смыслу осталось совсем чуть-чуть: ))
Взять Реальный путь и Целевой объект.
Аккуратно удалить существующую Junction.
Создать Относительную символьную ссылку, используя Целевой объект и Реальный путь.
Выполнить цикл по всему диску.
Posted after 1 hour 54 minutes:
Помимо NTLinks Maker http://wincmd.ru/plugring/NTLinksMaker.html
существует утилита Руссиновича
https://docs.microsoft.com/ru-ru/sysinternals/downloads/junction .
Для получения Рального пути ей в качестве параметра надо подсунуть найденную точку соединения:
junction.exe <junction directory>
Вот так (ещё один способ, 4-ый) можно организовать рекурсивный вывод всех точек соединения из текущей папки:
junction.exe –s .
А так можно аккуратно удалять точки соединения:
junction.exe -d <junction directory>
Осталось объединить NTLinks Maker, утилиту Руссиновича и соорудить скрипт в командном процессоре...
В этом я не силён. (( |
|
Back to top |
|
|
HankHank
Joined: 15 Apr 2010 Posts: 39
|
(Separately) Posted: Thu Jan 27, 2022 16:03 Post subject: Формализованная задача |
|
|
Задача формализована.
На томе содержатся исключительно JUNCTION, созданные одним и тем же плагином. Вид их одинаков.
Информация обо всех JUNCTION вываливается в файл:
dir /AL /S H:\ >JtoS.txt
В итоге JtoS.txt содержит регулярную структуру данных. Например:
Code: |
Том в устройстве H имеет метку 2 NTFS
Серийный номер тома: CAE4-9F0A
Содержимое папки H:\Слушать\Слушать\ Инструменты\Труба (trumpet)
09.12.2010 23:43 <JUNCTION> Baldauf Rudiger [\??\H:\Фонотека\Jazz - fusion\Baldauf Rudiger]
29.10.2011 02:21 <JUNCTION> Beiderbecke Leon Bix [\??\h:\Фонотека\Jazz\Beiderbecke Leon Bix]
...
0 файлов 0 байт
...
Содержимое папки H:\Слушать\Слушать\Modern jazz
09.10.2010 08:28 <JUNCTION> Lloyd Charles [\??\H:\Фонотека\Jazz - avant-guard\Lloyd Charles]
0 файлов 0 байт
Содержимое папки H:\Слушать\Слушать\Smooth
23.08.2010 21:29 <JUNCTION> Blake Aaron - Desire (2007) [\??\H:\Фонотека\Jazz - smooth\Aaron Blake\Blake Aaron - Desire (2007)]
02.09.2010 18:56 <JUNCTION> Club des Belugas - Swop (2008) [\??\H:\Фонотека\Jazz - smooth\ Various\Club des Belugas - Swop (2008)]
...
0 файлов 0 байт
Всего файлов:
1 файлов 0 байт
665 папок 316*940*726*272 байт свободно
|
Очевидно, вся информация, нужная для реорганизации дисков, присутствует.
Формально нужно организовать цикл по секциям, начинающимся со строк “Содержимое папки”.
В каждой секции пройти по строкам, содержащим “<JUNCTION>”, каждый раз в переменную %t помещая содержимое квадратных скобок без символов “\??\” (целевой объект), а в переменную %l – ссылку.
Для первого вхождения:
%t = “H:\Фонотека\Jazz - fusion\Baldauf Rudiger”,
%l = “H:\Слушать\Слушать\ Инструменты\Труба (trumpet)\Baldauf Rudiger”.
Для второго вхождения:
%t = “h:\Фонотека\Jazz\Beiderbecke Leon Bix”,
%l = “H:\Слушать\Слушать\ Инструменты\Труба (trumpet)\Beiderbecke Leon Bix”.
и т.д.
%t лежит внутри “[\??\ ... ]”.
%l образуется конкатенацией строки, стоящей следом за “Содержимое папки” , бэк-слеша и строки, стоящей между “<JUNCTION>” и строкой ”[\??\“ без лидирующих и замыкающих пробелов.
В именах файлов, кроме русских букв, могут встречаться спецсимволы (,;:_ и т.п.).
Процедура замены JUNCTION на SYMLINKD понятна. Для этого есть соответствующая команда NTLinks Maker. Есть ещё и штатная команда MKLINK /D ...
Требуется, по возможности, помощь в шаблоне обработки.
Процедура замены с удалением JUNCTION и созданием SYMLINKD вставляется в шаблон без особых хлопот. |
|
Back to top |
|
|
HankHank
Joined: 15 Apr 2010 Posts: 39
|
(Separately) Posted: Thu Jan 27, 2022 22:25 Post subject: |
|
|
Код для скрипта может быть ещё проще, если использовать команду
DIR /AL /B /S H:\
Тогда получим строки с полными путями к ссылкам:
Code: |
H:\Слушать\Слушать\Albright Gerald
H:\Слушать\Слушать\Alex Rostotsky - Time when fish think of the past (2004)
H:\Слушать\Слушать\Dave Brubeck - Ken Burns Jazz (Columbia - Legacy Records) 2000
H:\Слушать\Слушать\Dino Saluzzi - El Encuentro (2010) [Flac]
H:\Слушать\Слушать\Modern Jazz Quartet - Live At The Lighthouse (MFSL MFCD 827) (1967)
…
|
А, еcли вызвать FSUTIL, указав ему ссылку, то получим список строк, в котором нас интересует “Print Name:”.
Например:
FSUTIL reparsepoint query “H:\Слушать\Слушать\Alex Rostotsky - Time when fish think of the past (2004)”
Code: |
Reparse Tag Value : 0xa0000003
Tag value: Microsoft
Tag value: Name Surrogate
Tag value: Mount Point
Substitue Name offset: 0
Substitue Name length: 184
Print Name offset: 186
Print Name Length: 176
Substitute Name: \??\h:\Фонотека\Jazz\Rostotsky Alex\Alex Rostotsky - Time when fish think of the past (2004)
Print Name: h:\Фонотека\Jazz\Rostotsky Alex\Alex Rostotsky - Time when fish think of the past (2004)
…
|
Т.о., проблемы со спецсимволами в именах папок сокращаются. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
HankHank
Joined: 15 Apr 2010 Posts: 39
|
(Separately) Posted: Sun Jan 30, 2022 17:26 Post subject: Тема исчерпана |
|
|
Решение задачи нашлось быстрее, чем предполагалось изначально.
Сердечная благодарность коллегам за неформальное и оперативное участие.
Удачи всем нам! |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|