Когда дело доходит до копирования каталога, который содержит другие каталоги в подкаталогах и файлах, реализация команды cp с флагом -R может эффективно выполнить операцию с помощью простого синтаксиса команды, подобного приведенному ниже.
user@computer$ cp -R path/to/source/directory path/to/destination/directory
Однако в некоторых случаях вам может понадобится скопировать определенную структуру каталогов, которая уже существует, например, для ваших личных проектов или для системы хранения файлов, просто потому, что эта структура каталогов удобна, и может потребоваться много времени, чтобы полностью воссоздать ее с нуля.
В этой статье мы рассмотрим различные подходы к копированию структуры каталогов без вложенных в них файлов.
Задача.
Поскольку основной целью этой статьи является успешное копирование структуры каталогов из уже существующего и заполненного каталога (с подкаталогами), нам понадобится наш собственный заполненный каталог для справочных целей.
Рассмотрим следующую структуру каталогов, предварительно просмотренную командой tree Linux:
user@computer$ tree -a dir1
Согласно выводу команды tree, корневой каталог (dir1) имеет три подкаталога и всего 10 файлов. Наша цель — скопировать этот скелет структуры каталогов в новое место назначения без 10 файлов, которые уже существуют.
1. Копирование структуры каталогов Linux с помощью команд tree и xargs.
Мы уже знаем, что команда tree имитирует древовидный формат при отображении содержимого каталога. С другой стороны, команда xargs принимает стандартный ввод от системного пользователя или предыдущий результат выполнения команды для построения и выполнения командных строк.
Объединениям эти две команды. Для этого выполним следующее:
- Получим все пути к каталогам из существующей структуры каталогов.
- Перенаправим и используем полученные пути к каталогам в качестве входных данных.
- Используем команду mkdir -p, чтобы воссоздать полученные пути к каталогам в новом месте.
Получение путей к каталогам Linux
Мы уже имеем команду tree для создания древовидного формата существующей структуры каталогов. Добавим некоторые флаги и параметры команды, чтобы команда tree вывела пути к каталогам без детализации файлов в каталогах.
user@computer$ tree -dfi —noreport dir1
Окончательная реализация команды, которая скопирует структуру каталогов в каталог dir2, находящийся в домашней директории, будет выглядеть следующим образом:
user@computer$ tree -dfi —noreport dir1 | xargs -I{} mkdir -p «$HOME/dir2/{}»
Теперь давайте снова воспользуемся командой tree, чтобы убедиться, что структура каталогов была скопирована без файлов:
user@computer$ tree -a $HOME/dir2/dir1/
У нас есть три каталога и ноль файлов, цель достигнута.
2. Скопируем структуру каталогов Linux с помощью команд find и xargs.
Как и в случае с командой tree, мы можем использовать команду find, чтобы получить полные пути к каталогам в нашей целевой структуре каталогов.
user@computer$ find dir1 -type d
Параметр -type d сообщает команде find, что нужно отобразить только каталоги.
Затем указанную выше команду можно передать команде xargs с назначением (например, $HOME/Documents) для создания структуры каталогов без файлов.
user@computer$ xargs -I{} mkdir -p «$HOME/Documents/{}»
итоговая команда будет выглядеть следующим образом:
user@computer$ find dir1 -type d | xargs -I{} mkdir -p «$HOME/Documents/{}»
Проверим, что у нас в итоге получилось.
В качестве альтернативы, сочетание команды find с аргументом -exec дает те же результаты:
user@computer$ find dir1 -type d -exec mkdir -p «$HOME/Desktop/{}» \;
Заключение.
Вот и добавилось в копилку навыков еще одно умение. Надеюсь кому-то пригодится. Знаете другие классные способы копирования структуры каталогов без файлов? Не стесняйтесь оставлять комментарии.
А если Вам понравилась статья, то подписывайтесь на мой канал дзен (кнопка ниже), либо в telegrmm и ВКонтакте. Так же не забудьте про мой сайт RoadIT, в котором я потихоньку собираю материал, знание которого приведет вас в мир IT.