Синхронизация двух локальных папок в bash

Синхронизация двух локальных папок в bash

У меня есть одна большая папка "X" в домашнем каталоге и устаревшая ее копия на флешке — Y. Какой есть аналог rm Y; cp X Y, но без перезаписи уже существующих файлов?

решение1

Есть еще много объектов недвижимостиrsyncчем упоминается в предыдущем ответе. Вы должны изучить их самостоятельно:

man rsync

Но для решения вашей проблемы я бы предложил:

rsync -a --delete X Y

Таким образом, получатель (Y) удалит любой файл, который у него есть, которого нет в X. Убедитесь, что вы делаете это правильно. Неправильное использование в качестве root может легко убить вашу систему... :)

решение2

Взгляни наrsync(1). Он предназначен для выполнения именно того, что вам нужно.

rsync -av X Y

Он поддерживает удаленное копирование через собственный протокол или ssh, но его также можно использовать локально.

В зависимости от желаемого поведения вы также можете передать опцию --update. Это скажет rsync не перезаписывать файлы, которые уже существуют на цели и являются более новыми, чем в источнике.

Если вы хотите удалить лишние файлы (т. е. файлы, которые существуют в Y, но отсутствуют в X), вы можете добавить эту --deleteопцию.

решение3

Вы могли бы использоватьФитус/Залоха.ш. Сначала он вычисляет необходимые действия по синхронизации, представляет их вам, запрашивает подтверждение, а затем выполняет их:

$ Zaloha.sh --sourceDir="X" --backupDir="Y"

решение4

Я думаю, что часть функций, которые вы ищете в опции -u (обновление), на самом деле существует в этой опции:

"--ignore-existing" - пропустить обновление файлов, существующих на приемнике

Связанный контент