Как сказал SleighBoy, rsync - это, безусловно, инструмент, который вы ищете. Так как на первый взгляд это может быть страшно, из-за множества вариантов, я предложу наиболее важные для вас, исходя из ваших потребностей. Основной синтаксис для локальных резервных копий:
rsync [OPTION..] SRC.. DST
Обычно используется параметр --archive/-a
поскольку он включает в себя некоторые другие общие параметры, такие как --recursive
и параметры, чтобы сохранить права доступа к файлам.
Один из вариантов, который вам не нужно использовать, - --delete
потому что в противном случае rsync удалит каждый файл, который находится в целевом DST, но отсутствует в исходном SRT.
Вы, вероятно, хотите также параметр --relative/-R
. Это позволяет использовать относительные пути. Со страницы руководства:
... это означает, что полные пути, указанные в командной строке, отправляются на сервер, а не только в последние части имен файлов. Это особенно полезно, когда вы хотите отправить несколько разных каталогов одновременно. Например, если вы использовали эту команду:
rsync -av /foo/bar/baz.c /tmp /
... это создаст файл с именем baz.c в /tmp /. Если вместо этого вы использовали
rsync -avR /foo/bar/baz.c /tmp /
затем будет создан файл с именем /tmp/foo/bar/baz.c - полный путь будет сохранен. Чтобы ограничить количество отправляемой информации о пути, вы можете вставить точку и косую черту в исходный путь, например:
rsync -avR /foo/./bar/baz.c remote:/tmp /
Это создаст /tmp/bar/baz.c на удаленной машине.
Вам также нужна опция:
--exclude = ОБРАЗЕЦ
Один из очень удобных вариантов - - --dry-run
который просто имитирует передачу. Вы можете использовать его для проверки ваших команд rsync.
Следующие параметры могут быть использованы, чтобы сделать процесс резервного копирования многословным:
--stats --verbose --human-readable --progress
Подводя итог, если вам нужно сделать резервную копию папки /home/user
в папке /media/backup
исключая папки /home/user/lib
и /home/user/dir1/dir2
то вы можете использовать:
rsync -aRvh --exclude=/home/user/lib --exclude=/home/user/dir1/dir2 /home/user /media/backup
это воссоздает всю иерархию каталогов /home/user
в /media/backup
.