Страница 1 из 3

Синхронизация каталогов по эталонной папке

Добавлено: Вт янв 17, 2017 18:23
MilitaryPT
Задача стоит в следующем: есть каталог эталон "C:\Metadata" который следует синхронизировать c каталогами
С:\config\Environment\restoreDefault\Metadata\
С:\config\Micro\restoreDefault\Metadata\
C:\config\PrivateEffects\restoreDefault\Metadata\ и т. д.
Каталогов пару сотен, стандартным методом получается синхронизировать только каталог<->каталог, а требует каталог<->каталоги.
Перекопал кучу тем, перепробовал уйму программ но решения так и не нашел.

Добавлено: Вт янв 17, 2017 18:36
Skif_off
MilitaryPT
Наверное, можно попробовать FastCopy в режиме Sync: из эталонной папки будут скопированы файлы, которые различаются по дате и/или размеру, а файлы, отсутствующие в эталонной папке, будут удалены.

Добавлено: Вт янв 17, 2017 19:07
MilitaryPT
Skif_off
Но с таким же успехом я могу использовать и синхронизацию в Total Commander, проблема в том что каталогов Metadata пару сотен и каждый из них открывать в программе FastCopy займет кучу времени, к тому же копировать все файлы с эталонной папки не надо, а только обновить имеющиеся в обеих папках файлы. Также я могу пропустить по невнимательности один из каталогов что в дальнейшем приведет к куче ошибок в роботе программы.

Добавлено: Вт янв 17, 2017 19:17
Flasher
MilitaryPT
Раз нет нужды в новых файлах, создайте один раз жёсткие/символические ссылки на файлы в этих каталогах, да и всё. Место сэкономите, да и синхронизировать больше не придётся.
Чтобы ускорить процесс для несменных файлов, после первого создания ссылок уже их можно раскидать в найденные поиском и выделенные папки при соответствующей настройке ключа CopyLinks (см. описание в справке).

Добавлено: Вт янв 17, 2017 20:25
Rodny
MilitaryPT писал(а):Перекопал кучу тем, перепробовал уйму программ но решения так и не нашел.
Тут всё же не синхронизация, а зеркалирование, судя по описанию.
ICE Mirror. Есть командная строка, сделать простой батник.

Добавлено: Вт янв 17, 2017 20:35
Skif_off
MilitaryPT писал(а):проблема в том что каталогов Metadata пару сотен и каждый из них открывать в программе FastCopy займет кучу времени
Не открывайте, параметры командной строки там на что? :) В батнике зовёте всю пару сотен с /no_ui и засовываете его в планировщик, например.
MilitaryPT писал(а):к тому же копировать все файлы с эталонной папки не надо
В этом случае и не будет всё копироваться, будут скопированы только файлы с другим размером и/или датой, остальные пропущены.

Добавлено: Ср янв 18, 2017 05:18
MilitaryPT
Flasher писал(а):Раз нет нужды в новых файлах, создайте один раз жёсткие/символические ссылки на файлы в этих каталогах
Символические ссылки не помогут, так как данные каталоги должны обновится и упаковаться в rar архив.
Rodny писал(а):Тут всё же не синхронизация, а зеркалирование, судя по описанию.
Думаю это именно синхронизация так как зеркалирование создает полное зеркало папки, а мне этого не требуется, только обновить те файлы которые есть в целевой директории по эталон директории.
Skif_off писал(а):В этом случае и не будет всё копироваться, будут скопированы только файлы с другим размером и/или датой, остальные пропущены.
Я не знаю по чему но программа все равно копирует все файлы и папки, то есть она копирует и те файлы которых нет в целевом каталоге.

Запускаю программу с параметром sync
"C:\Program Files\FastCopy\FastCopy.exe" /cmd=sync "c:\Metadata" /to="c:\test\2\remove\Metadata"
Она конечно заменяет файлы которые отличаются но также и копирует все файлы с папки эталона в целевую папку, чего делать не требуется.

Добавлено: Ср янв 18, 2017 07:37
Flasher
MilitaryPT писал(а):так как данные каталоги должны обновится и упаковаться в rar архив.
Каталоги? Т.е. целевые? Так я и пишу - один раз создаёте ссылки и больше обновление не потребуется.
Если бы речь шла о файлах в каталоге-эталоне (т.е. они не редактируются, а перезаписываются через удаление старых), то это другое дело.

Насчёт упаковки поподробнее. Пишите от начала до конца в деталях, что и в каком виде требуется. Есть там затрагиваемые подпапки или нет и т.д.

Добавлено: Ср янв 18, 2017 08:23
sa
MilitaryPT
Чтобы не пропустить по невнимательности один из каталогов, можно создать батник со строками наподобие
totalcmd.exe /S=S:= /L= C:\Metadata /R= С:\config\...\restoreDefault\Metadata
Но ключа /no_ui здесь нет, затем всё ручками делается.

Добавлено: Ср янв 18, 2017 09:41
MilitaryPT
Flasher писал(а):Насчёт упаковки поподробнее. Пишите от начала до конца в деталях, что и в каком виде требуется. Есть там затрагиваемые подпапки или нет и т.д.
Есть программа в которой есть каталог "Metadata" он обновляется с выходом нового патча. Также есть программа которая редактирует этот каталог путем замены в нем фалов которые могут располагаться в различных подкаталогах. В программе есть две функции Remove Effects и Restore Default. При выборе функции Remove Effects в каталоге эталоне изменяются определенные файлы путем замены файлов с каталога removeEffects\Metadata\Effects\*\*\ *\ в эталонный каталог. При выборе функцию Restore Default программа должна вернуть прежний вид каталогу путем замены фалов из каталога \restoreDefault\Metadata\Effects\*\ *\ *\ в эталонный каталог.
Задача стоит в следующем чтобы держать каталоги restoreDefault\Metadata\*\*\...\ в актуальном состоянии с выходом нового патча, путем синхронизации c эталоном Metadata. После синхронизации программа которая включает в себя все эти каталоги упаковывается и отправляется на форум.

Добавлено: Ср янв 18, 2017 09:56
Flasher
MilitaryPT
Замена там как происходит? С удалением или перезаписью содержимого файлов?
MilitaryPT писал(а): После синхронизации программа которая включает в себя все эти каталоги упаковывается и отправляется на форум.
Для этого достаточно освежить файлы командой F в WinRAR.

Скрипт освежения и упаковки сделать могу, только уже в ПО, т.к. история совсем не про ТС.

Добавлено: Ср янв 18, 2017 10:06
MilitaryPT
Flasher писал(а):Замена там как происходит? С удалением или перезаписью содержимого файлов?
Перезапись содержимого файлов, файлы остаются на прежних местах просто вносятся изменения.
Копаясь на англоязычном форуме я нашел тему, я так понимаю что стандартными средствами данную задачу решить в Total Commander не возможно?
http://ghisler.ch/board/viewtopic.php?t ... w=previous

Добавлено: Ср янв 18, 2017 10:12
Flasher
MilitaryPT писал(а):Перезапись содержимого файлов
В таком случае предложение со ссылками остаётся актуальным. Нет смысла плодить сущности. А во время упаковки в архив пойдут именно файлы, если не использовать ключи -oh/-ol.
А вообще для символических ссылок (в отличии от жёстких) не имеет значения, удалялись файлы или нет. Так что в любом случае решение годное.
MilitaryPT писал(а): я так понимаю что стандартными средствами данную задачу решить в Total Commander не возможно?
Автоматом (без ручек) - нет.

Добавлено: Ср янв 18, 2017 10:28
MilitaryPT
Flasher писал(а):В таком случае предложение со ссылками остаётся актуальным.
А примерный алгоритм создания символьных ссылок каков?
Для начала должен найти все пути ко всем файлам в restoreDefault\Metadata\ потом создать ссылки в папку эталон этих файлов, а затем только упаковать? Не получится так что я упакую только ссылки?

Добавлено: Ср янв 18, 2017 11:17
Flasher
MilitaryPT
Забираем утилиту по приведённой ссылке.
В другой панели одна из целевых папок, стоим в папке-эталоне, жмём Ctrl+B, выделяем нужные файлы, жмём кнопку (см. пути):

Код: Выделить всё

TOTALCMD#BAR#DATA
*%COMMANDER_PATH%\Utils\NTLinksMaker\NTLinksMaker.exe /q /s
/r="%P" "@%WL" "%T"
Utils\NTLinksMaker\NTLinksMaker.exe
Создать символические ссылки на выбранное в другой панели
После этого исходной папкой ставим ту, куда попали ссылки, а последующие папки располагаем в другой панели и пользуемся кнопкой:

Код: Выделить всё

TOTALCMD#BAR#DATA
xcopy
"%P*" "%T" /ciqshrukoxyb
wcmicons.dll,48
Освежить имеющиеся файлы в структуре|целевой панели файлами из исходной

1
Можно, в принципе, и для списка путей папок (см. путь к Список.txt) сделать:

Код: Выделить всё

TOTALCMD#BAR#DATA
%ComSpec% /c for /f "delims=" %# in ('type "%COMMANDER_PATH%\Scripts\Список.txt"')
do xcopy "%P*" "%%#" /ciqshrukoxyb
wcmicons.dll,48
Освежить имеющиеся файлы в структурах целевых|каталогов заданного списка файлами из активного

1
MilitaryPT писал(а):Не получится так что я упакую только ссылки?
Я же писал:
Flasher писал(а):А во время упаковки в архив пойдут именно файлы, если не использовать ключи -oh/-ol.