У меня есть две копии папки
src/
dest/
Я хочу объединить их, делая следующее:
Если файл только в src
, я хочу, чтобы он был перемещен вdest
Если файл только в dest
, я хочу, чтобы он игнорировал IE, оставленный в покое.
Если файл находится в обоих файлах и имеет одинаковое содержимое (IE одинакового размера и даты), удалите изsrc
Если файл находится в обоих файлах и не имеет идентичного содержимого, оставьте его, src
чтобы я мог вручную объединить их.
В этой последней категории должно быть только очень небольшое количество файлов (от 0% до 5% от общего числа файлов), но я не знаю, как разделить их в обоих и одно и то же в обоих, но разные.
Я пытался выяснить, как это сделать, rsync
но пока безрезультатно.
for file in `find src/ -type f`; do diff $file `echo $file | sed 's/src/dest/'` && rm $file || echo $file; done
(вы можете пропустить,|| echo $file
если хотите, оно включено для полноты)\?*[
начальный-
). Вам нужно использовать двойные кавычки вокруг подстановок переменных , передавать--
утилиты перед именами файлов, использоватьfind … -exec …
вместо анализа выходных данныхfind
. Сrm
командой в миксе, это - рецепт для катастрофы.Унисон - это инструмент, который вы ищете. Попробуйте unison-gtk, если вы предпочитаете графический интерфейс. Но я не думаю, что он удалит похожие файлы: в унисон постарайтесь, чтобы оба каталога были одинаковыми. Тем не менее, это легко: 1) определить, какие файлы нужно скопировать; 2) какие из них требуют ручного слияния.
источник
Следующий скрипт должен действовать разумно. Он перемещает файлы из источника в место назначения, никогда не перезаписывая файл и создавая каталоги по мере необходимости. Исходные файлы с соответствующим другим файлом в месте назначения остаются одни, как и файлы, которые не являются обычными файлами или каталогами (например, символические ссылки). Файлы, оставленные в источнике, - это файлы, для которых существует конфликт. Осторожно, я не проверял это вообще.
Другой подход заключается в монтировании объединения один каталог над другим, например, с помощью funionfs или unionfs-fuse .
источник