Создать новое пустое дерево каталогов из существующего дерева с файлами

Создать новое пустое дерево каталогов из существующего дерева с файлами

У меня большое дерево каталогов с множеством файлов.

Я хотел бы воссоздать структуру каталогов в новом месте, но только каталоги, а не файлы.

Я проверил cpстраницу руководства, но не увидел аргумента, который мог бы мне помочь.

решение1

rsync -av -f"+ */" -f"- *" /.../SOURCE /.../DESTINATION

решение2

find . -type d -exec mkdir -p ~/to/{} \;

Взято из ответа @whitequark на этот вопрос:Копирование структуры каталогов без копирования файлов в Mac OS X

решение3

Другой подход — использовать tree, что довольно удобно и перемещаться по деревьям каталогов на основе его сильных опций. Есть опции только для каталогов, исключить пустые каталоги, исключить имена с шаблоном, включить только имена с шаблоном и т. д. Проверьтеman tree

Преимущество: вы можете редактировать или просматривать список, или если вы часто пишете скрипты и создаете пакет пустых каталогов

Подход: создать список каталогов с помощью tree, использовать этот список в качестве аргументов ввода дляmkdir

tree -dfi --noreport > some_dir_file.txt

-dfiвыводит список только каталогов, печатает полный путь для каждого имени, заставляет дерево не печатать строки отступов,

--noreportПропускает печать отчета о файлах и каталогах в конце списка дерева, просто чтобы выходной файл не содержал ничего лишнего

Затем перейдите в место назначения, где вы хотите разместить пустые каталоги, и выполните команду

xargs mkdir < some_dir_file.txt

решение4

Нашел это, так как столкнулся с похожей потребностью. С достаточно новой версией rsync это ваш лучший выбор.

Если у вас нет последней версии rsync, то это поможет:

find path/to/source -type -d -exec mkdir path/to/dest/'{}' \; -exec chown --reference='{}' path/to/dest/'{}' \; -exec chmod --reference='{}' path/to/dest/'{}' \;

(Вариант этого может быть использован для зеркалирования разрешений)

Связанный контент