Как мне реплицировать структуру каталогов на удаленный сервер 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/
Другие вопросы по тегам