Как мне реплицировать структуру каталогов на удаленный сервер Linux?
Я хочу скопировать сложную структуру каталогов с одного сервера Linux на другой удаленный сервер, начиная с определенного подкаталога.
Я не хочу, чтобы содержимое файлов, я просто хочу сохранить структуру, владельца и разрешения, так как клонируемый сервер содержит большой объем данных, которые не должны быть скопированы на новый компьютер.
Я предполагаю, что это можно сделать как-то, изменив структуру папок и отключив ее на удаленной машине. Или с помощью rsync для копирования без отправки данных. Или, возможно, с помощью find для создания сценария оболочки.
Если у кого-нибудь есть подкладка, которая это делает, я был бы признателен.
3 ответа
Вы можете объединить find
а также cpio
составить список подкаталогов из текущего рабочего каталога таким образом:
find . -type d -print | cpio -oO dirs.cpio
Чтобы восстановить эту иерархию каталогов на удаленном компьютере, скопируйте dirs.cpio
файл в нужное место и запустите:
cpio -iI dirs.cpio
Одно решение может быть
find . -type d > dirs
чтобы найти каталоги, затем используйте этот файл с -T
вариант tar
:
tar cpzT dirs -f dest_file.tar.gz
который должен создать сжатый архив (z
) сохранение разрешений (p
) архивируя только перечисленные файлы (T dirs
). Передача файла, распакуйте с
tar xpzf dest_file.tar.gz
и ты должен быть готов.
Использование rsync
для рекурсивного копирования только каталогов с исходным путем в каталог назначения:
rsync --archive --verbose --filter="+ */" --filter="- *" /path/to/src/ /path/to/dest/
rsync --archive --verbose --filter="+ */" --filter="- *" /path/to/apache/logs/ user@domain:/path/to/apache/logs/
Использование опций --include
а также --exclude
вместо --filter
правила со старой версией rsync
:
rsync --archive --verbose --include="*/" --exclude="- *" /path/to/src/ /path/to/dest/
rsync --archive --verbose --include="*/" --exclude="*" /path/to/apache/logs/ user@domain:/path/to/apache/logs/