
У меня большое дерево каталогов с множеством файлов.
Я хотел бы воссоздать структуру каталогов в новом месте, но только каталоги, а не файлы.
Я проверил 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/'{}' \;
(Вариант этого может быть использован для зеркалирования разрешений)