Копирование файлов и директоров на удаленном сервере, в то время как, исключая некоторых из них

Сервер 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.

1
задан llaskin 18 June 2010 в 16:46
поделиться

4 ответа

Первые два плаката дали хорошие рекомендации по 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. Обязательно ознакомьтесь с подробностями любых незнакомых вам опций.

1
ответ дан 2 September 2019 в 23:41
поделиться

Поскольку вы хотите «скопировать все файлы, кроме этих», следуя вашему примеру, вы можете сделать это:

 ssh server2 "cp -rv /var/www/!(web1|web3|file1.php|file3.php) /tmp"

Но помните, что это очень некрасиво для резервного копирования вашего сервера: p

0
ответ дан 2 September 2019 в 23:41
поделиться

Для этого вам действительно следует использовать 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 -)

1
ответ дан 2 September 2019 в 23:41
поделиться

Я делаю то же самое при развертывании новых релизов на моем веб-сервере. Возможно ли использовать rsync через ssh? rsync позволяет вам указать опцию --exclude и указать диры/файлы в командной строке или через файл. Вот довольно хорошее описание, которое я использовал в прошлом: http://articles.slicehost.com/2007/10/10/rsync-exclude-files-and-folders

0
ответ дан 2 September 2019 в 23:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: