Как осуществить создание нового каталога и необходимых подкаталогов рекурсивно
Перейти к содержимому

Как осуществить создание нового каталога и необходимых подкаталогов рекурсивно

  • автор:

Is it possible to recursively create folders using a shell script?

I’m trying mkdir folder1/folder2/folder3 , but it doesn’t work. How can I do it?

2 Answers 2

You should pass the -p parameter to mkdir so it will create all the subfolders. So following your example:

You may also want to add -Z to make sure the security context is that of the current directory while you’re at it:

mkdir -p -Z dir1/dir2/dir3/dir4

assuming that’s what you want and you want to avoid having to do a bunch of chown’ing and chmod’ing later.

    Featured on Meta
Related
Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.9.4.43609

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

recursive mkdir

Or is there no alternative but to make the directories one at a time?

4 Answers 4

Parameter p stands for ‘parents’.

tr05t's user avatar

EEAA's user avatar

Using mkdir -p is a simple way for most modern OSes:

However, mkdir -p is not recommended in many manuals. Read documentation for of GNU make and autoconf about problems with using mkdir -p :

The cross platform installation and configuration systems have their own safe alternatives for mkdir -p .

CMake to use in shell command line:

Autoconf to use in script with preprocessing:

But these solutions require cmake or autoconf ( M4 ) tools to be installed (and possible preprocessing)

You can use also install-sh script with -d option:

This script is used by autoconf and automake project. I think it must be the safest solution.

At the time I was searching for a cross platform solution for standard /bin/sh without dependences, but haven’t found one. Therefore I wrote the next script that may be not ideal, but I think it is compliant to most cross platform requirements:

This script can be used for old systems, where option -p for mkdir is absent.

sed -based cross platform version of dirname was added to the code. It works with a way similar to dirname (correct with path / , paths with base name only, paths with trailing / , paths with and without trailing \n s). This function can’t work correct if the path has newlines or some invalid characters for current locale. It also replaces any combination of / ( // , /// ) with single /

Changed line mkdir «$1» || return 1 to test -d «$1» || < mkdir "$1" || return 1; >because mkdir terminates with error if path exists and this check is needed for paths containing constructions like aaa\. (If aaa doesn’t exist previous version creates aaa and then tries to create it again).

This version of mkd doesn’t generate an error if path already exist (but it still has the possibility to generate such an error in parallel execution) and can’t get several directories in command line.

Mkdir Recursive

In this guide, we will look at using mkdir to create directories recursively.

Creating Directories Using mkdir

First, let’s look at the most basic way of using mkdir. The following command will create a directory with the name given:

You can verify if the action was successful:

Alternatively, we can enable the verbose mode with mkdir. This way, the mkdir command will print the action’s result. To enable the verbose mode, use the flag -v or –verbose:

We can also create multiple directories using a single mkdir command:

However, mkdir doesn’t allow creating a multi-layer directory by default. If attempted, mkdir will show an error that it can’t find the parent directory.

Creating Directories Recursively

To create a multi-layer directory, mkdir comes with the flag -p or –parents. In this mode, mkdir will return no error if the parent directory exists. If the parent directory doesn’t exist, it will create it instead.

Let’s try this option out. In the following example, we’re creating a three-layer directory:

With the help of the tree command, we can visualize the structure:

Typing the full name of the mkdir flags is a bit tedious, right? We can combine –verbose and –parents in the following manner:

Creating Multiple Child Directories With Brace Expansion

If you’re using bash, we can also take advantage of the brace-expansion feature to create multi-layered directories. Have a look at the following example:

We can use the tree command for better visualization of the directory hierarchy:

Final Thoughts

In this guide, we explored using mkdir to create directories recursively. For demonstration, we instructed mkdir to create multi-layer directories using the –parents flag. Per instruction, mkdir recursively created the child directories. Learn more about using the mkdir command.

Как использовать рекурсивную команду создания каталога в Linux

/ Documents. Обычно вы не создаете в нем дополнительных каталогов.

Однако вы можете использовать рекурсивную форму команды Linux make directory для создания целых деревьев каталогов. Вы можете создать каталог внутри каталога, в котором вы находитесь, а затем создать внутри него множество других каталогов. Естественно, чтобы продолжить, вам нужно будет работать из командной строки. Удерживайте Ctrl, Alt и T, чтобы открыть графический терминал. Вы также можете выполнить поиск терминала в Ubuntu Unity Dash или выбрать меню «Приложения», нажать «Системные инструменты» и выбрать «Терминал». Вам не нужно работать как пользователь root, если вы не создаете каталоги за пределами вашего собственного домашнего каталога.

Метод 1: использование родительского параметра mkdir

Если вы хотите создать сразу несколько каталогов, вы можете ввести mkdir -p эй / это / есть / а / целое / дерево а затем нажмите Enter. Вы получите полный набор каталогов с каждым из этих имен, вложенных друг в друга. Очевидно, вы можете использовать любое имя в любом месте дерева. Если некоторые из этих каталогов существуют, скажем, там уже есть hey и this, но не другие, то mkdir просто передаст их без ошибок и создаст каталоги под ними.

Параметр -p называется родительским и теоретически может быть вызван во многих дистрибутивах, набрав –parents вместо –p в предыдущей команде. Таким образом вы можете создать практически неограниченное количество каталогов одновременно. Сразу после создания они работают как любые другие каталоги. Это означает, что если вы попытаетесь удалить верхнюю, она тоже будет жаловаться, что не пуста!

Метод 2: использование родительского mkdir Option Plus Brace Expansion

Расширение фигурных скобок позволяет вам создать группу каталогов, которые следуют единому шаблону при использовании интерпретатора команд bash. Например, если вы набрали mkdir , то вы создадите четыре каталога с соответствующими номерами в текущем каталоге. Если хотите, то можете объединить эту концепцию с родительской опцией. Например, вы можете ввести mkdir -p 1 / и нажмите Enter, чтобы создать каталог с именем 1 с каталогами с именами 1, 2, 3 и 4 внутри него. Это очень мощная команда, и вы можете использовать ее для одновременного создания множества каталогов. Это делает его идеальным для сортировки коллекций фотографий, видео и музыки в Linux. Некоторые люди также используют эту технологию при создании сценариев установки для программного обеспечения или пакетов, которые они планируют распространять.

Вы, конечно, можете смешать эту опцию и добавить фигурные скобки к любой части команды. Если вы хотите создать некоторые каталоги с помощью расширения скобок, а затем другие с помощью только родительской рекурсии, вы можете попробовать такую ​​команду, как mkdir -p a / directory / внутри , который создаст каталог и внутри, а также внутри1, внутри2, внутри3 и внутри4 под ним. Не стесняйтесь немного поэкспериментировать и создать дополнительные каталоги внутри друг друга, как только вы уже научились использовать команду mkdir, но имейте в виду, что вы не сможете удалить каталоги, в которых есть другие каталоги, без небольшой рекурсия или использование файлового менеджера.

NST Distro на базе Fedora запускает новый образ Live ISO

Fedora 28 обеспечивает ядро ​​для последней версии Network ecurity Toolkit (NT), которая представляет собой загружаемый динамический дистрибутив на основе UB, который разработан, чтобы предложить сист.

Узнать

Разработчики Thunderbird исправляют потенциально критические недостатки безопасности

С выпуском Thunderbird 52.9 разработчики смогли исправить ряд критических недостатков безопасности, поэтому пользователям настоятельно рекомендуется выполнить обновление, чтобы гарантировать, что они .

Узнать

Мобильный Android-троянец позволяет взломщикам удаленно управлять телефонами пользователей

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *