Копирование файлов и каталогов на удаленный сервер, исключая некоторые из них - PullRequest
1 голос
/ 18 июня 2010

Сервер 1 подключен к Серверу 2 через SSH.

Мы знаем это: я могу выполнить такую ​​команду, как

"ssh server2" cp -rv / var / www / tmp ""

, которая скопирует весь каталог / var / www в / 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.

Ответы [ 4 ]

1 голос
/ 18 июня 2010

Первые два автора имеют хорошие предложения о 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 голос
/ 18 июня 2010

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

редактировать ::

В случае локального сервера вы все еще можете использовать rsync, однако вы также можете использовать tar и исключить то, что вам не нужно.

 (cd dir1;tar --exclude 'web2/*' -cf -) | (cd dir2; tar -xvf -)

или find dir1 dir2> exclude-files (cd dir1; tar --exclude-from exclude-files -cf -) | (cd dir2; tar -xvf -)

0 голосов
/ 18 июня 2010

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

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

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

0 голосов
/ 18 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...