Как мне скопировать дерево каталогов, но не файлы в Linux?

Странный - копия и вставка Вашего ответа и выполнение, названное-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 и записи в Вашем файле, это изменяет зональный корень?

17
задан 5 April 2011 в 18:23
8 ответов

Просто найденный этим:

rsync -a -f"+ */" -f"- *" source/ destination/

http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html

25
ответ дан 2 December 2019 в 20:27
find some/dir -type d -print0 | rsync --files-from=/dev/stdin -0 ...
9
ответ дан 2 December 2019 в 20:27

Также можно сделать:

find inputdir -type d | cpio -pdumv destdir

Питание простоты ;)

3
ответ дан 2 December 2019 в 20:27

Точно так же использование (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).

1
ответ дан 2 December 2019 в 20:27

Другой подход - с find и mkdir :

find SOURCE -type d -exec mkdir TARGET/{} \;

Просто убедитесь, что TARGET уже существует, или используйте параметр -p для mkdir.

5
ответ дан 2 December 2019 в 20:27
cp -al 

Копирует все файлы с жесткими ссылками. Та же структура, те же разрешения. (примечание: жесткие ссылки, поэтому память не теряется.)

-1
ответ дан 2 December 2019 в 20:27

ls -d */ @источник: найти . -тип d -print0 >dirs.txt @назначение: xargs -0 mkdir -p

Это приведет к тому, что обе команды будут использовать нули в качестве разделителей вместо белых пробелов. Обратите внимание, что порядок следования -типа d и -print0 важен!

.
-1
ответ дан 2 December 2019 в 20:27
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
1
ответ дан 2 December 2019 в 20:27

Теги

Похожие вопросы