Когда дело доходит до копирования каталога, который содержит другие каталоги в подкаталогах и файлах, реализация команды cp с флагом -R может эффективно выполнить операцию с помощью простого синтаксиса команды, подобного приведенному ниже.
cp -R path/to/source/directory path/to/destination/directory
Однако в некоторых случаях вам может понадобится скопировать определенную структуру каталогов, которая уже существует, например, для ваших личных проектов или для системы хранения файлов, просто потому, что эта структура каталогов удобна, и может потребоваться много времени, чтобы полностью воссоздать ее с нуля.
В этой статье мы рассмотрим различные подходы к копированию структуры каталогов без вложенных в них файлов.
Задача.
Поскольку основной целью этой статьи является успешное копирование структуры каталогов из уже существующего и заполненного каталога (с подкаталогами), нам понадобится наш собственный заполненный каталог для справочных целей.
Рассмотрим следующую структуру каталогов, предварительно просмотренную командой tree Linux:
tree -a dir1
![tree -a dir1](https://roadit.ru/wp-content/uploads/2022/08/Untitled2.jpeg)
Согласно выводу команды tree, корневой каталог (dir1) имеет три подкаталога и всего 10 файлов. Наша цель — скопировать этот скелет структуры каталогов в новое место назначения без 10 файлов, которые уже существуют.
1. Копирование структуры каталогов Linux с помощью команд tree и xargs.
Мы уже знаем, что команда tree имитирует древовидный формат при отображении содержимого каталога. С другой стороны, команда xargs принимает стандартный ввод от системного пользователя или предыдущий результат выполнения команды для построения и выполнения командных строк.
Объединениям эти две команды. Для этого выполним следующее:
- Получим все пути к каталогам из существующей структуры каталогов.
- Перенаправим и используем полученные пути к каталогам в качестве входных данных.
- Используем команду mkdir -p, чтобы воссоздать полученные пути к каталогам в новом месте.
Получение путей к каталогам Linux
Мы уже имеем команду tree для создания древовидного формата существующей структуры каталогов. Добавим некоторые флаги и параметры команды, чтобы команда tree вывела пути к каталогам без детализации файлов в каталогах.
tree -dfi --noreport dir1
![tree -dfi --noreport dir1](https://roadit.ru/wp-content/uploads/2022/08/Untitled3.jpeg)
Окончательная реализация команды, которая скопирует структуру каталогов в каталог dir2, находящийся в домашней директории, будет выглядеть следующим образом:
tree -dfi --noreport dir1 | xargs -I{} mkdir -p "$HOME/dir2/{}"
Теперь давайте снова воспользуемся командой tree, чтобы убедиться, что структура каталогов была скопирована без файлов:
tree -a $HOME/dir2/dir1/
![tree -a $HOME/dir2/dir1/](https://roadit.ru/wp-content/uploads/2022/08/Untitled5.jpeg)
У нас есть три каталога и ноль файлов, цель достигнута.
2. Скопируем структуру каталогов Linux с помощью команд find и xargs.
Как и в случае с командой tree, мы можем использовать команду find, чтобы получить полные пути к каталогам в нашей целевой структуре каталогов.
find dir1 -type d
Параметр -type d сообщает команде find, что нужно отобразить только каталоги.
![find dir1 -type d](https://roadit.ru/wp-content/uploads/2022/08/Untitled6.jpeg)
Затем указанную выше команду можно передать команде xargs с назначением (например, $HOME/Documents) для создания структуры каталогов без файлов.
xargs -I{} mkdir -p "$HOME/Documents/{}"
итоговая команда будет выглядеть следующим образом:
find dir1 -type d | xargs -I{} mkdir -p "$HOME/Documents/{}"
Проверим, что у нас в итоге получилось.
![tree -a $HOME/Documents/dir1](https://roadit.ru/wp-content/uploads/2022/08/Untitled7.jpeg)
В качестве альтернативы, сочетание команды find с аргументом -exec дает те же результаты:
find dir1 -type d -exec mkdir -p "$HOME/Desktop/{}" \;
Заключение.
Вот и добавилось в копилку навыков еще одно умение. Надеюсь кому-то пригодится. Знаете другие классные способы копирования структуры каталогов без файлов? Не стесняйтесь оставлять комментарии.
А если Вам нравится мой сайт, и то что я делаю, то можете поддержать этот проект, собирающий в себя статьи и руководства по IT технологиям. Это можно сделать нажав, кнопочку ниже.
А если Вам нравится мой сайт, и то что я делаю, то можете поддержать этот проект, собирающий в себя статьи и руководства по IT технологиям. Это можно сделать нажав, кнопочку ниже.
Was this helpful?
0 / 0