Когда дело доходит до копирования каталога, который содержит другие каталоги в подкаталогах и файлах, реализация команды cp с флагом -R может эффективно выполнить операцию с помощью простого синтаксиса команды, подобного приведенному ниже.

user@computer$ cp -R path/to/source/directory path/to/destination/directory

Однако в некоторых случаях вам может понадобится скопировать определенную структуру каталогов, которая уже существует, например, для ваших личных проектов или для системы хранения файлов, просто потому, что эта структура каталогов удобна, и может потребоваться много времени, чтобы полностью воссоздать ее с нуля.
В этой статье мы рассмотрим различные подходы к копированию структуры каталогов без вложенных в них файлов.

Задача.

Поскольку основной целью этой статьи является успешное копирование структуры каталогов из уже существующего и заполненного каталога (с подкаталогами), нам понадобится наш собственный заполненный каталог для справочных целей.

Рассмотрим следующую структуру каталогов, предварительно просмотренную командой tree Linux:

user@computer$ tree -a dir1
tree -a dir1
проверка структуры каталогов

Согласно выводу команды tree, корневой каталог (dir1) имеет три подкаталога и всего 10 файлов. Наша цель — скопировать этот скелет структуры каталогов в новое место назначения без 10 файлов, которые уже существуют.

1. Копирование структуры каталогов Linux с помощью команд tree и xargs.

Мы уже знаем, что команда tree имитирует древовидный формат при отображении содержимого каталога. С другой стороны, команда xargs принимает стандартный ввод от системного пользователя или предыдущий результат выполнения команды для построения и выполнения командных строк.

Объединениям эти две команды. Для этого выполним следующее:

  • Получим все пути к каталогам из существующей структуры каталогов.
  • Перенаправим и используем полученные пути к каталогам в качестве входных данных.
  • Используем команду mkdir -p, чтобы воссоздать полученные пути к каталогам в новом месте.

Получение путей к каталогам Linux

Мы уже имеем команду tree для создания древовидного формата существующей структуры каталогов. Добавим некоторые флаги и параметры команды, чтобы команда tree вывела пути к каталогам без детализации файлов в каталогах.

user@computer$ tree -dfi —noreport dir1
tree -dfi --noreport dir1
Получение списка путей к каталогам Linux

Окончательная реализация команды, которая скопирует структуру каталогов в каталог dir2, находящийся в домашней директории, будет выглядеть следующим образом:

user@computer$ tree -dfi —noreport dir1 | xargs -I{} mkdir -p «$HOME/dir2/{}»

Теперь давайте снова воспользуемся командой tree, чтобы убедиться, что структура каталогов была скопирована без файлов:

user@computer$ tree -a $HOME/dir2/dir1/
tree -a $HOME/dir2/dir1/
Скопированная структура каталогов Linux

У нас есть три каталога и ноль файлов, цель достигнута.

2. Скопируем структуру каталогов Linux с помощью команд find и xargs.

Как и в случае с командой tree, мы можем использовать команду find, чтобы получить полные пути к каталогам в нашей целевой структуре каталогов.

user@computer$ find dir1 -type d

Параметр -type d сообщает команде find, что нужно отобразить только каталоги.

find dir1 -type d
Просмотр каталогов Linux

Затем указанную выше команду можно передать команде xargs с назначением (например, $HOME/Documents) для создания структуры каталогов без файлов.

user@computer$ xargs -I{} mkdir -p «$HOME/Documents/{}»

итоговая команда будет выглядеть следующим образом:

user@computer$ find dir1 -type d | xargs -I{} mkdir -p «$HOME/Documents/{}»

Проверим, что у нас в итоге получилось.

tree -a $HOME/Documents/dir1

В качестве альтернативы, сочетание команды find с аргументом -exec дает те же результаты:

user@computer$ find dir1 -type d -exec mkdir -p «$HOME/Desktop/{}» \;

Заключение.

Вот и добавилось в копилку навыков еще одно умение. Надеюсь кому-то пригодится. Знаете другие классные способы копирования структуры каталогов без файлов? Не стесняйтесь оставлять комментарии.

А если Вам  нравится мой сайт, и то что я делаю, то можете поддержать этот проект, собирающий в себя статьи и руководства по IT технологиям. Это можно сделать нажав, кнопочку ниже.

А если Вам нравится мой сайт, и то что я делаю, то можете поддержать этот проект, собирающий в себя статьи и руководства по IT технологиям. Это можно сделать нажав, кнопочку ниже.

Добавить комментарий