Перейдя на Linux из Windows, я хотел бы найти альтернативное программное обеспечение для Winmerge или, скорее, изучить инструменты командной строки для сравнения и синхронизации двух папок в Linux. Я был бы признателен, если бы вы сказали мне, как выполнять следующие задачи в командной строке ... (Я изучал diff и rsync, но мне все еще нужна помощь.)
У нас есть две папки: "/ home / user / A" и "/ home / user / B"
Папка A - это место, где хранятся обычные файлы и папки, а папка B - это папка резервной копии, которая служит полным зеркалом папки A. (Пользователь ничего не сохраняет и не изменяет непосредственно в папке B.)
Мои вопросы:
Как перечислить файлы, которые существуют только в папке B? (Например, те, которые были удалены из папки A с момента последней синхронизации.)
Как скопировать файлы, которые существуют только в папке B, обратно в папку A?
Как составить список файлов, которые существуют в обеих папках, но имеют разные временные метки или размеры? (Те, которые были изменены в папке A с момента последней синхронизации. Я хотел бы избежать использования контрольных сумм, потому что есть десятки тысяч файлов, и это сделало бы процесс слишком медленным.)
Как сделать точную копию папки A в папку B? Я имею в виду, скопируйте все из папки A в папку B, которая существует только в папке A, и удалите все из папки B, которая существует только в папке B, но не касаясь файлов, которые являются одинаковыми в обеих папках.
источник
Ответы:
Это помещает папку A в папку B:
Если вы хотите, чтобы содержимое папок A и B было одинаковым, поместите
/home/user/A/
(с косой чертой) в качестве источника. Это берет не папку A, а все ее содержимое и помещает ее в папку B. Вот так:-a
Выполните синхронизацию, сохранив все атрибуты файловой системы-v
бегать многословно-u
копировать только файлы с более новым временем модификации (или разницей в размере, если времена равны)--delete
удалить файлы в целевой папке, которые не существуют в источникеManpage: https://download.samba.org/pub/rsync/rsync.html
источник
/home/user/B/A
вместо того, чтобы перезаписывать содержимое A на содержимое B. Не могли бы вы помочь мне взглянуть на это?Вы могли бы
unison
инструмент, разработанный Бенджамином Пирсом в U Penn.Допустим, у вас есть два каталога,
/home/user/Documents/dirA/
а также/home/user/Documents/dirB/
Для синхронизации этих двух вы можете использовать:
~ $
unison -ui text /home/user/Documents/dirA/ /home/user/Documents/dirB/
В выходных данных
unison
будет отображаться каждый каталог и файл, которые отличаются в двух каталогах, которые вы просили синхронизировать. Он будет рекомендовать аддитивную синхронизацию (реплицировать отсутствующий файл в обоих местах) при первом запуске, затем создать и поддерживать дерево синхронизации на вашем компьютере, а при последующих запусках будет реализована истинная синхронизация (т. Е. Если вы удалите файл из.../dirA
него, также будет удален из.../dirB
. Вы также можете сравнить каждое изменение и, при желании, выбрать прямую или обратную синхронизацию между двумя каталогами.При желании, чтобы запустить графический интерфейс, просто удалите
-ui text
опцию из вашей команды, хотя я считаю, чтоcli
проще и быстрее в использовании.Подробнее об этом: учебник по Unison в пользовательской документации Unison .
источник
Ответ от TuxForLife довольно хороший, но я настоятельно рекомендую вам использовать его
-c
при локальной синхронизации. Вы можете утверждать, что не стоит тратить время / сеть на удаленную синхронизацию, но это стоит того для локальных файлов, потому что скорость очень велика.Это показывает, как наличие одинаковых размеров и временных меток может вас подвести.
Настройка
Rsync, который ничего не копирует, потому что все файлы имеют одинаковый размер и временную метку
Rsync, который работает правильно, потому что он сравнивает контрольные суммы
источник
Это то, что я использую для резервного копирования личных файлов, где меня не волнует все, о чем идет речь
-a
, и я хочу печатать больше полезной информации.Со страницы руководства rsync :
Из
rsync --info=help
Хотя это и менее очевидно, но это выглядит эквивалентно и короче:
источник
Это не совсем то, что вы просите, но вы могли бы рассмотреть возможность использования инструмента контроля версий. Такие инструменты, как Git, делают все, что вы просите, и даже больше, особенно если вы не работаете в папке B напрямую, было бы интересно взглянуть на это. Вы можете найти больше информации о git здесь
источник
Вы можете использовать это так:
Таким образом, вы скопируете содержимое папки A в папку B, а не содержимое самой папки A.
источник