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.
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.
-
The Overflow Blog
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.6.16.43501
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’.
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.
как осуществить создание нового каталога и необходимых подкаталогов рекурсивно linux
Linux организует свою систему файлов при помощи определенных иерархий. В связи с этим будет накапливаться достаточное количество данных, поскольку объем хранилища постепенно увеличивается. Чтобы упорядочить эти сведения, необходимо создать структуру каталогов.
Одна из самых распространенных ошибок — сохранение информации в базе домашнего каталога (того, в который можно попасть, войдя в систему). В нем и остальных подкаталогах, созданных для организации файлов, выполняется большая часть работы пользователя.
Поступив так, придется потратить огромное количество времени, чтобы найти нужные данные среди множества иных файлов. Команда mkdir (Make Directory) поможет справиться с такого рода проблемой.
Синтаксис
Данная команда позволяет пользователю создать один или более каталогов или подкаталогов с заданными именами и режимом доступа 0077, а также установить на них разрешения.
Примеры использования
Чтобы понять как работает утилита mkdir рассмотрим примеры.
Создадим новую папку под названием «newpapka». Для этого напишем команду без аргументов.
Новая папка будет принадлежать фактическому владельцу произведенного процесса. При попытке создать уже существующую результат получится ошибочным.
Создадим несколько папок newpapka2, newpapka3, newpapka4.
mkdir newpapka2 newpapka3 newpapka4
Создадим папку «papka» в «/root/katalog».
Создание родительских каталогов
Зайдем в папку «primercatalog» с помощью команды «cd».
Для примера воспользуемся аргументом «-m» и предоставим доступ на чтение, запись и выполнение содержимого каталогов.
Более подробно о назначении прав можно посмотреть в другой статье chmod.
Как использовать рекурсивную команду создания каталога в Linux
Обычно, когда вы используете команду mkdir Linux make directory, вы создаете единственный подкаталог, который находится в любом каталоге, в котором находится ваше приглашение. Если бы вы были в
/Documents и набрали mkdir Memoranda, вы бы создайте единственный каталог под названием Memoranda, который находится в
/Documents. Обычно внутри него не создается дополнительных каталогов.
Однако вы можете использовать рекурсивную форму команды Linux make directory для создания целых деревьев каталогов. Вы можете создать каталог внутри каталога, в котором вы находитесь, а затем создать внутри него множество других каталогов. Естественно, чтобы продолжить, вам нужно будет работать из командной строки. Удерживайте Ctrl, Alt и T, чтобы открыть графический терминал. Вы также можете выполнить поиск терминала в Ubuntu Unity Dash или выбрать меню «Приложения», нажать «Системные инструменты» и выбрать «Терминал». Вам не придется работать как пользователь root, если вы не создаете каталоги за пределами вашего собственного домашнего каталога.
Метод 1. Использование родительского параметра mkdir
Метод 2: Использование родительского параметра mkdir с расширением скобок
Как создавать каталоги в Linux (команда mkdir)
Синтаксис команды Linux mkdir
Синтаксис команды mkdir следующий:
Команда принимает в качестве аргументов одно или несколько имен каталогов.
Как создать новый каталог
Вы можете убедиться, что каталог был создан, перечислив его содержимое с помощью команды ls :
При указании только имени каталога без полного пути он создается в текущем рабочем каталоге.
Чтобы создать каталог в другом месте, вам необходимо указать абсолютный или относительный путь к файлу родительского каталога. Например, чтобы создать новый каталог в каталоге /tmp вы должны ввести:
Если вы попытаетесь создать каталог в родительском каталоге, в котором у пользователя недостаточно прав, вы получите сообщение об ошибке Permission denied :
Как создать родительские каталоги
Допустим, вы хотите создать каталог /home/linuxize/Music/Rock/Gothic :
Если какой-либо из родительских каталогов не существует, вы получите сообщение об ошибке, как показано ниже:
Как установить разрешения при создании каталога
Как создать несколько каталогов
Чтобы создать несколько каталогов, укажите имена каталогов в качестве аргументов команды, разделенные пробелом:
Команда mkdir также позволяет создать сложное дерево каталогов с помощью одной команды:
Приведенная выше команда создает следующее дерево каталогов :
Выводы
Команда mkdir в Linux используется для создания новых каталогов.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.
Linux.yaroslavl.ru
Randal Schwartz
Перевод Anton Petrusevich и Alex Ott
Например, возьмем типичную задачу: удаление ненужных пустых каталогов. Предположим, что у вас имеется WWW- или FTP-сервер для распространения пакетов программного обеспечения, и некоторые пакеты время от времени добавляются в, и удаляются из области доступа (скажем, /archive ). Утилиты для «публикации» конкретного пакета знают достаточно для создания подкаталогов при необходимости, но по некоторым причинам утилиты, которые выполняют «удаление» пакета не удаляют родительский каталог пакета.
Через некоторое время дерево каталогов окажется частично заполненным, а некоторые каталоги будут пустыми. Вы вы решаете, что наступило время для очистки дерева каталогов, возможно в ночных заданиях cron. Вы захотите удалить все пустые каталоги, но оставить все каталоги, которые выполняют какую-либо работу.
Давайте будем обрабатывать их с помощью рекурсивной подпрограммы. Мы будем использовать дескриптор каталога ждя считывания его содержимого каждого из каталогов, и если мы найдем в нем подкаталог, то мы перейдем в него и затем попытаемся его удалить, если он является пустым.
Содержимое каталога затем очищается и обрабатывается. Читая 4-х строковое выражение с конца к началу, мы считываем каталог, отбрасывая «.» and «..», сортируем его в алфавитном порядке и помещаем имя каталога в начало каждого имени.
Вот тот же код, переписанный с использованием стандартной библиотеки:
Даже сейчас в этом коде немного больше текста чем возможно. Мы можем использовать анонимные подпрограммы вместо создания именованной подпрограммы:
Здесь, конструкции sub достаточно для создания подпрограммы без имени и передачи ее coderef (ссылки на код) как первого параметра.
Вы даже может сделать все это из командной строки Unix:
Заметьте, что здесь я сразу передаю скрипт Perl. (Для дополнительной информации смотрите справочную страницу для find2perl ).
Но давайте вернемся назад к более интенсивному использованию File::Find в программах и покажем как сделать возможными сложные вещи. Например, я иногда любопытствую о том, куда расходуется мое дисковое пространство, так что было бы великолепно получить отчет о 20 самых больших файлах. Вот небольшой скрипт, который выполняет это:
Маленький, элегантный, простой скрипт. File::Find позволил нам атаковать проблемы рекурсии намного проще, чем соответствующий скрипт командного процессора.
В частности, выполнение этих действий вручную будет выглядеть следующим образом:
Как вы можете видеть, это достаточно утомительно. Так, что выполним это простым способом. с помощью Perl:
Я надеюсь, что вы получите удовлетворение от этого маленького введения в иерархические файловые системы, и от приведенных примеров, которые в будущем сэкономят вам времени.
Как создать каталог в Linux с помощью команды mkdir
Давайте посмотрим как создать каталог в системе Linux с помощью команды. В Linux мы можем использовать команду «mkdir«. Mkdir сокращенно от “make directory”. Большинство дистрибутивов Linux, таких как Ubuntu, RHEL, Debian и Centos, используют одну и ту же команду.
В этой статье я покажу вам 5 примеров использования mkdir для создания каталога в операционной системе Linux и Unix.
1) Команда mkdir в Linux системе.
Вы можете ввести mkdir в консоли.
По умолчанию запуск mkdir без каких-либо параметров приведет к созданию каталога в текущем каталоге. Вот пример:
mkdir
На снимке экрана мы создали каталог под названием «office«. Когда мы запустили команду mkdir, мы находились в каталоге ‘/home/pungki‘. Таким образом, новый каталог, которым является office, создается в каталоге /home/pungki. Если мы укажем точное местоположение, например : «/usr/local«, то Linux создаст каталог в каталоге «/usr/local«.
Если вдруг мы опять попытаемся создать каталог с таким же именем. Тогда Linux обнаружит, что каталог, который предполагается создать, уже существует, инструмент сообщит нам, что он не может его создать.
Ошибка создания каталога mkdir
Еще одним предварительным условием для создания каталога является то, что у вас должен быть доступ к местоположению, в котором он должен быть создан. Если доступа или прав нет, mkdir сообщит об ошибке.
mkdir сообщает об ошибке
2) Создание нескольких каталогов с помощью mkdir
Мы также можем создавать несколько каталогов одновременно. Допустим, мы хотим создать каталоги с именами «ubuntu«, «redhat» и «slackware«. Тогда синтаксис будет таким :
Если вы хотите создать подкаталоги с помощью mkdir
4) Установка привилегии доступа
Показанная выше команда создаст каталог с именем letter и предоставит права доступа только для чтения владельцу каталога, владельцу группы каталогов и любому другому лицу.
5) Показ сообщения для каждого созданного каталога
6) Создание каталога с датой с помощью команды mkdir
Так же вы можете создать имя каталога с датой. Это в основном полезно в сценариях командной консоли, когда требуется создать папки резервного копирования с датой. Делается это следующим образом:
Заключение
Команда Mkdir — одна из основных команд, используемых в Linux. Вы всегда можете перейти на man mkdir или ввести mkdir – help для того чтоб отобразить страницу помощи и изучить ее более подробно.