Странный - копия и вставка Вашего ответа и выполнение, названное-checkzone на нем, приводят к:
acshellam@dev1:/tmp$ named-checkzone example.com example.com.zone
zone example.com/IN: loaded serial 12
OK
acshellam@dev1:/tmp$ named-checkzone -v
9.6.1-P2
Вы уверенный это - корректный зональный файл, который Вы имеете в своей системе? Существует ли директива $ORIGIN где-нибудь между NS и записи в Вашем файле, это изменяет зональный корень?
Просто найденный этим:
rsync -a -f"+ */" -f"- *" source/ destination/
http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html
Точно так же использование (GNU) tar:
find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)
Вам действительно не нужно -print0
на командной строке находки или -0
на rsync командной строке, если у Вас нет имен файлов, которые содержат символы новой строки (который возможен, но очень маловероятен). Tar (и rsync и cpio) имена файлов чтения линию за линией; использование ПУСТОГО разделителя главным образом полезно с xargs
, который обычно читает, пробел разделил имена файлов (и так не обрабатывает файлы/каталоги с пробелами на их имена без -0
).
Другой подход - с find и mkdir :
find SOURCE -type d -exec mkdir TARGET/{} \;
Просто убедитесь, что TARGET уже существует, или используйте параметр -p для mkdir.
cp -al
Копирует все файлы с жесткими ссылками. Та же структура, те же разрешения. (примечание: жесткие ссылки, поэтому память не теряется.)
ls -d */ @источник: найти . -тип d -print0 >dirs.txt @назначение: xargs -0 mkdir -p
Это приведет к тому, что обе команды будут использовать нули в качестве разделителей вместо белых пробелов. Обратите внимание, что порядок следования -типа d и -print0 важен!
.