Сервер 1 подключен к Серверу 2 через SSH.
Мы знаем это: Я могу выполнить команду такой как
"ssh server2 "CP-rv/var/www/tmp""
который скопирует весь/var/www dir в/tmp. Однако в/var/www у нас есть следующая структура (демонстрационный вывод LS ниже)
$ ls
/web1/web2/web3 file1.php file2.php file3.php
Как я могу выполнить команду CP, которая исключит/web1,/web3, file1.php и file3.php (очевидно, просто копирование web2, и file2 не является опцией, так как существует значительно больше файлов, чем всего 6),
Примечание: Я использую это для резервного копирования Server2 до RSYNCing от Server1.
Первые два плаката дали хорошие рекомендации по rsync. Вот более полное описание процесса.
(1) Вы хотите сделать резервную копию сервера 2 перед синхронизацией с сервера 1, поэтому давайте сделаем это с помощью rsync
. Вот команда с сервера 1 (предполагается, что у него есть доступ к серверу 2):
ssh user@server2 "rsync $RSYNC_OPTS /var/www/ /path/to/backup"
(2) С резервной копией сервера 2 давайте теперь синхронизируемся с сервером 1 (опять же, с сервера 1)
rsync $RSYNC_OPTS /path/to/www/ user@server2:/var/www/
Пока вы используете разумные RSYNC_OPTS
, резервное копирование и синхронизация должны быть разумными. Ричард предложил разумные варианты:
RSYNC_OPTS="--exclude-from rsync-exclude.txt --stats -avz --numeric-ids -e ssh"
Если вы хотите получить точное воспроизведение, я бы рекомендовал --delete
или --delete-after
. Обязательно ознакомьтесь с подробностями любых незнакомых вам опций.
Поскольку вы хотите «скопировать все файлы, кроме этих», следуя вашему примеру, вы можете сделать это:
ssh server2 "cp -rv /var/www/!(web1|web3|file1.php|file3.php) /tmp"
Но помните, что это очень некрасиво для резервного копирования вашего сервера: p
Для этого вам действительно следует использовать rsync.
Я предпочитаю использовать файл rsync-exclude.txt, чтобы указать, чего я не хочу, поскольку это больше подходит для будущего.
/public_ftp/.ftpquota
/tmp
/var/local/backups/rsyncs
/backup/rsync
/proc
/dev
поэтому команда могла быть
rsync --exclude-from rsync-exclude.txt --stats -avz -e ssh \
--numeric-ids /syncfrom/dir user@example.com:/backup/sync-to-dir
edit ::
В случае локального сервера вы все еще можете использовать rsync, однако вы также можете использовать tar и исключить то, что вам не нужно.
(cd dir1;tar --exclude 'web2/*' -cf -) | (cd dir2; tar -xvf -)
или найти dir1 dir2> exclude-files (cd dir1; tar --exclude-from exclude-files -cf -) | (cd dir2; tar -xvf -)
Я делаю то же самое при развертывании новых релизов на моем веб-сервере. Возможно ли использовать rsync через ssh? rsync позволяет вам указать опцию --exclude и указать диры/файлы в командной строке или через файл. Вот довольно хорошее описание, которое я использовал в прошлом: http://articles.slicehost.com/2007/10/10/rsync-exclude-files-and-folders