Можно ли заставить SCP игнорировать символические ссылки во время копирования?
мне нужно переустановить один из наших серверов, и в качестве меры предосторожности, Я хочу переехать /home,/etc,/opt и /Services на резервный сервер.
однако, у меня есть проблема: из-за большого количества символических ссылок много файлов копируются несколько раз.
можно сделать scp игнорировать символические ссылки (или на самом деле скопировать ссылку как ссылку не как каталог или файл)? Если нет, есть ли другой способ сделать это?
4 ответов:
Я знал, что это возможно, я просто взял неправильный инструмент. Я сделал это с rsync
rsync --progress -avhe ssh /usr/local/ XXX.XXX.XXX.XXX:/BackUp/usr/local/
Я нашел это the
rsyncметод не работает для меня, однако я нашел альтернативу, которая действительно работает на этом сайте (www.docstore.mik.ua/orelly).раздел 7.5.3 из "O'Reilly: SSH: безопасная оболочка. Окончательное Руководство".
7.5.3. Рекурсивное копирование каталогов
...
хотя scp может копировать каталоги, это не обязательно наилучший метод. Если ваш каталог содержит жесткие или мягкие ссылки, они не будут дублироваться. Ссылки копируются как простые файлы (целевые объекты ссылок), и, что еще хуже, циклические ссылки на каталоги вызывают бесконечный цикл scp1. (scp2 обнаруживает символические ссылки и копирует их цели вместо этого.) Другие типы специальных файлов, такие как именованные каналы, также не копируются правильно.Лучшим решением является использование tar, который правильно обрабатывает специальные файлы, и отправляет его на удаленную машину, чтобы быть незапятнанным, через SSH:
$ tar cf - /usr/local/bin | ssh server.example.com tar xf -
используя
taroversshкак отправитель и получатель делает трюк так же:cd $DEST_DIR ssh user@remote-host 'cd $REMOTE_SRC_DIR; tar cf - ./' | tar xvf -
одним из решений является использование оболочки трубы. У меня ситуация, когда я получил *.файлы gz и символические ссылки, созданные некоторым программным обеспечением для ссылки на то же самое *.GZ файлы с немного более коротким именем. Если я просто использую scp, то символические ссылки будут скопированы как обычные файлы и в результате будут дублироваться. Я знаю, что rsync может игнорировать символические ссылки, но мои файлы gz не сжимаются с помощью параметров syncable, и синхронизация очень медленная при копировании этих файлов gz. Поэтому я просто использую следующий скрипт скопируйте файлы:
find . -type f -exec scp {} target_host:/directory/name/data \;опция-f будет находить только обычные файлы и игнорировать символьные ссылки. Вам нужно дать эту команду на исходном хосте. Надеюсь, это может помочь некоторым пользователям в моей ситуации. Дайте мне знать, если я что-то пропустил.
Comments