Синхронизация каталогов с разной структурой
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Программное обеспечение

#1: Синхронизация каталогов с разной структурой Author: Own Little World PostPosted: Sun Nov 26, 2017 13:45
    —
Здравствуйте!
В TC есть классная функция, которая называется "Синхронизация каталогов".
К примеру, у меня есть папка "Работы", которая имеет структуру:

Мне нужно таскать эту папку на флешке, после прихода домой копировать эту папку на компьютер. С этим "Синхронизация каталогов" справляется на ура.
Проблема возникает, если я изменил структуру каталогов или файлов в папке "Работы". Например, переместил файл "Соляная.xls" из папки Химия в папку Кислоты. Если я попробую сделать синхронизацию с помощью "Синхронизация каталогов", то в результате у меня будут две копии одного файла, но в разных каталогах.
Насколько я знаю, существует "Асимметричная синхронизация", в которой содержимое и структура левой панели копируется в правую. То, что не подходит - удаляется. Вроде под мою задачу подходит, но если файл очень большой? Удалить его, а потом заново копировать? Бред же.
Существует ли программа, которая позволит решить данную проблему.

#2:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Nov 26, 2017 15:24
    —
Own Little World
В последней фразе предыдущего поста, насколько понимаю, в конце предполагается знак вопроса? Так вот, чтобы решать проблему, она должна быть. Вместо неё лично я вижу малопонятные фантазии на тему. Вы справку TC не хотите внимательно прочитать и проверить прочитаное на практике, чтобы уясниить реальный принцип синхронизации? В асимметричном режиме в каталоге справа удаляются файлы, которые не существуют в том же каталоге слева. Что вы, интересно, намерены заново в тот же каталог копировать, если у вас одноимённый файл слева уже в другом каталоге (где, насколько понимаю, они теперь и должен находиться)? А если у вас слева файл теперь на новом месте, то справа он на том же месте самопроизвольно не появится, пока вы его не скопируете в ходе синхронизации куда следует. Удаляется файл в одном место, копируется в другое. По-вашему, программа должна догадаться переместить именно его на целевом диске из одного места в другое телепатически? Какая разница, большой файл или нет? И какое ещё решение тут может быть?

#3:  Author: CaptainFlintLocation: Москва PostPosted: Sun Nov 26, 2017 15:43
    —
Avada
Скажем так, я лично не вижу препятствий к тому, чтобы существовала программа, которая при синхронизации ищет соответствия не только каталог-в-каталог, а ещё и между каталогами, чтобы не удалять+копировать большой файл-дубликат, а всего лишь переименовать/переместить его в новое место, сэкономив тем самым время синхронизации. Другой вопрос, что такой готовой программы я тоже не знаю.

#4:  Author: Own Little World PostPosted: Sun Nov 26, 2017 15:51
    —
Avada wrote:
Own Little World
В последней фразе предыдущего поста, насколько понимаю, в конце предполагается знак вопроса?
Ага.
Avada wrote:
Удаляется файл в одном место, копируется в другое.
Вот именно это мне и не нравится. Есть у меня допустим две папки с фильмами, которые я должен синхронизировать. В одной папке все фильмы разложены аккуратно по каталогам, а во второй - все в куче. При этом фильмы абсолютно одинаковы, т.е. папки имеют одинаковый объем.
Я делаю ассиметричную синхронизацию (левая панель - "аккуратная" папка, правая панель - "неаккуратная" папка). TC видит, что в "неаккуратной" папке нет никаких подкаталогов, он их создает. Он видит, что в созданных каталогах нет фильмов. Он копирует их из первой папки. TC видит, что в "неаккуратной" папке есть какие-то фильмы, которых нет в первой. Он их удаляет.
Получается, что банальная операция перемещения фильмов по подкаталогам (которая выполняется за секунды), при синхронизации в TC может занять часы.
Avada wrote:
По-вашему, программа должна догадаться переместить именно его на целевом диске из одного места в другое телепатически?
Телепатически, математически, физически - как пользователя, меня эту не волнует.

#5:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Nov 26, 2017 15:54
    —
CaptainFlint
Я всё это чисто теоретически понимаю. Что-то подобное неоднократно на разных форумах запрашивалось, но как-то тихо сходило на нет после вопроса, как такая программа должна выполнять исходное сканирование для обнаружения подобных сопоставлений, как нужные соответствия одинаковых файлов в разных каталогах отличить в этом случае от ненужных и, главное, сколько времени это всё вообще займёт. А выше, между тем, было высказано недовольство, что большой файл удаляется и копируется долго. Сэкономив время синхронизации, сколько мы до этого потеряем на увеличении времени такого интеллектуального сканирования?

Own Little World wrote:
Телепатически, математически, физически - как пользователя, меня эту не волнует.

И напрасно. Меня не то что волнует, но полагаю, перед программой надо ставить реальные, а не фантастические задачи, если действительно нужно решение проблемы, а не "игра ума". Во всяком случае, мне средства синхронизации, работающие точно по запрошенному алгоритмы, неизвестны.

#6:  Author: Own Little World PostPosted: Sun Nov 26, 2017 16:08
    —
CaptainFlint wrote:
Другой вопрос, что такой готовой программы я тоже не знаю.
Очень жаль. А так хотелось.

Добавлено спустя 2 минуты:

Avada wrote:
главное, сколько времени это всё вообще займёт. А выше, между тем, было высказано недовольство, что большой файл удаляется и копируется долго.
Операция чтения выполняется всяко быстрее, чем операция записи.

Добавлено спустя 4 минуты:

Avada, CaptainFlint спасибо за ответы.
Если подытожить все выше написанное, то программ, выполняющих "интеллектуальную синхронизацию" нет, и скорее всего не будет.
Ну и ладно, придется все делать по старинке.

#7:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Nov 26, 2017 16:19
    —
Own Little World wrote:
Операция чтения выполняется всяко быстрее, чем операция записи.

Ага. В общем и целом. Только вот печаль: записываются по итогам сравнения конкретные файлы, а читаться сначала должно ВСЁ. Даже в стандартном функционале TC построение файловых списков справа и слева и их последующее сравнение (особливо по содержимому) — штука не очень быстрая, когда файлов много и/или они большие. А в режиме "сравниваем всё со всем" — и подавно. Вам бы сильно понравился вариант инструмента синхронизации, когда на КАЖДЫЙ файл слева последовательно ищутся в процессе построения списка ВСЕ дубликаты справа, невзирая на их местоположение?

#8:  Author: FlasherLocation: Москва PostPosted: Sun Nov 26, 2017 20:53
    —
Avada wrote:
когда на КАЖДЫЙ файл слева последовательно ищутся в процессе построения списка ВСЕ дубликаты справа
По логике это делалось бы иначе. Сперва подсчитывались бы хэши с обеих сторон, а потом происходил бы быстрый поиск в коллекции подсчитанных хэшей для сопоставления с каждым файлом слева. Или как при поиске дубликатов — при возникновении нового хэша создавалась бы коллекция-группа. Только мне непонятно, как бы эта затея в GUI выглядела. Без шкуры скрипт-то написать можно.

Own Little World
Я на вашем месте создавал бы дерево с симлинками/хардлинками (см. NTLinksMaker), а потом в общей папке делал бы поиск дубликатов с последующим удалением лишнего.

#9:  Author: Zmy PostPosted: Sun Nov 26, 2017 22:18
    —
Own Little World, я написал программу, которая подходит под вашу задачу.

Но она пока не сравнивает по содержимому. Только имя и размер.

Хотите попробовать?

#10:  Author: Own Little World PostPosted: Sun Nov 26, 2017 23:10
    —
Zmy wrote:

Хотите попробовать?
Конечно!

#11:  Author: Zmy PostPosted: Sun Nov 26, 2017 23:25
    —
Скачиваете SynDir.exe.
Описание её работы находится в файле Description.htm.

https://cloud.mail.ru/public/HJDJ/dzZnShFi8

Я её практически не тестировал.
Вы, я думаю, понимаете, что на важных файлах опасно производить подобные манипуляции.
Хорошо её потестируйте на неважных файлах.

#12:  Author: FlasherLocation: Москва PostPosted: Mon Nov 27, 2017 00:03
    —
Zmy
В мануале слишком много ошибок разного калибра. Стоило бы это всё в божеский вид приводить перед выкладкой.

Quote:
Понимаете смысл?
Огромный каталог, с файлами по несколько гигабайт, будут сначала удаляться, а потом они же будут копироваться из источника,
когда можно только поменять ихний адрес в главной файловой таблице (MFT), при этом ничего не удаляя. Жёсткий диск будет вам за это бесконенчно благодарен.
Не, не понимаю...

#13:  Author: Zmy PostPosted: Mon Nov 27, 2017 00:04
    —
 !  CaptainFlint:
Строгое замечание за нарушение пп. 3, 9 правил. Исходное сообщение удалено.


Добавлено спустя 2 часа 26 минут:

flasher wrote:
Не, не понимаю...


Что не понятно?

 !  CaptainFlint:
Дубль дописанного сообщения удалён за бессмысленностью оного. Форум — это не чат, вам никто не обязан круглосуточно мониторить и мгновенно отвечать на сообщения.

#14:  Author: Zmy PostPosted: Mon Nov 27, 2017 20:46
    —
Own Little World, перекачайте.

Теперь программа умеет сравнивать по содержимому. Хорошо её потестируйте.

Текущая версия 3.0.2.0.

#15:  Author: Own Little World PostPosted: Sat Dec 09, 2017 21:23
    —
Zmy
Наконец-то смог добраться до вашей программы!
Я пользовался ей один раз (как раз для синхронизации каталогов с разной структурой и с обновленными файлами). В целом, программа сработала на ура, но была пара ошибок:
1. Программа не работает с длинными абсолютными именами файлов (>259). У меня были подкаталоги с проектами Inventor (это 3d САПР). Inventor имеет привычку создавать длинные имена файлов (вернее, длинные пути к именам файлов). Программа SynDir просто удалила эти файлы из ЦЕЛИ (они там уже были). В ИСТОЧНИКЕ они остались, с помощью синхронизации TC я с легкостью восстановил их.
2. Почему-то при работе в режиме без сравнения по содержимому у меня не синхронизировался один файл *.doc, хотя даты изменения были различны (SynDir просто проигнорировала этот файл). При синхронизации в режиме сравнения по содержимому файл был успешно синхронизирован.
Еще меня огорчило отсутствие хотя бы минимального прогрессбара. Т.е., если программа зависнет, я даже не буду этого знать. Но это мелочи.

Кстати, на просторах интернета я нашел программу FreFileSync. Если вкратце, она тоже позволяет синхронизировать каталоги с разной структурой, плюс она имеет схожий со встроенным в TC средством синхронизации интерфейс (показывает направление копирования/перемещения, можно применить фильтр).
Но она имеет минус. Для синхронизации каталогов с разной структурой, она создает файл *.ffs_db в каталоге. Т.е. при первой синхронизации, в отличии от программы SynDir, она не сможет перемещать файлы внутри каталога и будет действовать напролом (как TC). При второй и последующих синхронизациях программа уже будет перемещать файлы внутри каталога вместо его удаления и последующего копирования.

Тем не менее, Zmy, спасибо за программу. Пусть и с огрехами, но она позволила наконец-то навести порядок в моих папках, а потом с легкостью синхронизировать их за небольшое время.



Total Commander -> Программное обеспечение


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group