Управление конфликтами имен файлов при объединении папок (Linux)

316
GattoVizzato

Мне нужно что-то вроде синхронизации SW для выполнения двунаправленного (рекурсивного) объединения папок.

Скажем, у меня есть 2 папки A и B.

Папка A содержит файлы: 1, 3, 5 and 7.
Папка B содержит файлы:1, 2, 3 and 6.

После выполнения слияния результат должен быть следующим:

Папка A: 1, 1-b, 2, 3, 3-b, 5, 6, 7
папка B:1, 1-a, 2, 3, 3-a, 5, 6, 7


Разбивая их по отдельности:

обе папки A и B, содержащие: 2, 5, 6, 7
(объединение ИЛИ не конфликтующих имен файлов: двунаправленная копия (того же ранга, без конкретного источника или какого-либо конкретного места назначения) без переименования;

Папка A, содержащая также: 1, 1-b, 3, 3-b(собственные версии плюс добавленные)
Папка B, содержащая также: 1, 1-a, 3, 3-a(собственные версии плюс добавленные)
(dash-a или dash-b - это просто заполнитель для автоматического переименования, чтобы обойти конфликт имен, не очень важно. Каждый суффикс будет делать). По сути, каждая папка будет содержать все версии (без новых, перезаписывающих старые) всех файлов, независимо от их имен.

Как я мог получить этот результат? Я посмотрел на 'meld', но не сработал, как ожидалось (он предлагал перезаписать существующие файлы, не удалось переименовать), и 'rsync' кажется по сути асимметричным (присвоение источника более высокого ранга, чем назначения). Мне нужно настоящее слияния ...

Заранее благодарю за любую помощь. Кстати ... отдельное существующее ПО было бы более ценно, чем новое изобретение горячей воды вручную. Но если ничего не существует, скрипты тоже подойдут. TY. Gatto

0
Это не очень понятно ... Я попытаюсь отредактировать это, добавив некоторые разрывы строк (только?), Но если вы можете уточнить это дальше, это может быть более полезным Xen2050 6 лет назад 0

1 ответ на вопрос

0
Xen2050

Посмотрите на infoстраницы для простого старого cp. Команда как

cp --archive --backup --suffix="-original" A/* B 

Следует скопировать каждый файл из A в B, и, если есть какие-либо уже существующие файлы (конфликтующие имена файлов), существующий файл назначения будет переименован [name]-original(т.е. сначала будет сделана резервная копия).

Затем запустите его снова, используя --no-clobberвместо --backupи --suffixдолжны скопировать все оставшиеся файлы только в B в A

cp --archive --no-clobber --exclude='*-original' B/* A 

Это должно исключить [name]-originalфайлы в B. Убедитесь, что для этого нет файлов с этим суффиксом.

И добавить, -vчтобы увидеть, что происходит.

[Пробовал - рекурсивно, но не совсем так, как ожидалось]

Похожие вопросы