Linux mkdir p

Обновлено: 07.07.2024

Как mkdir -p , но в Node.js!

Теперь с современным API и без* ошибок!

* может содержать некоторые ошибки

Вывод (где /tmp/foo уже существует)

Или, если у вас нет времени ждать обещаний:

И теперь /tmp/foo/bar/baz существует, ура!

mkdirp(dir, [opts]) -> Обещание

Создайте новый каталог и все необходимые подкаталоги в dir с восьмеричной строкой прав доступа opts.mode . Если opts является строкой или числом, оно будет рассматриваться как opts.mode .

Если параметр opts.mode не указан, по умолчанию используется значение 0o777 & (~process.umask()) .

Promise преобразуется в первый созданный каталог, который нужно было создать, или в undefined, если все уже существует. Обещание отклоняется, если обнаружены какие-либо ошибки. Обратите внимание, что в случае отклонения обещания некоторые каталоги могут быть созданы, поскольку рекурсивное создание каталогов не является атомарной операцией.

При желании вы можете передать альтернативную реализацию fs, передав opts.fs . Ваша реализация должна иметь opts.fs.mkdir(path, opts, cb) и opts.fs.stat(path, cb) .

Вы также можете переопределить только один или другой параметр mkdir и stat, передав параметры opts.stat или opts.mkdir или указав параметр fs, который переопределяет только один из них.

mkdirp.sync(dir, opts) -> String|null

Синхронно создать новый каталог и все необходимые подкаталоги в каталоге с восьмеричной строкой прав доступа opts.mode . Если opts является строкой или числом, оно будет рассматриваться как opts.mode .

Если параметр opts.mode не указан, по умолчанию используется значение 0o777 & (~process.umask()) .

Возвращает первый каталог, который нужно было создать, или значение undefined, если все уже существует.

При желании вы можете передать альтернативную реализацию fs, передав opts.fs . Ваша реализация должна иметь opts.fs.mkdirSync(путь, режим) и opts.fs.statSync(путь) .

Вы также можете переопределить только один или другой параметр mkdirSync и statSync, передав параметры opts.statSync или opts.mkdirSync или указав параметр fs, который переопределяет только один из них.

Используйте ручную реализацию (не нативную). Это значение по умолчанию, когда собственная реализация недоступна или реализация stat/mkdir переопределена.

Используйте нативную реализацию (а не ручную). Это значение по умолчанию, когда доступна собственная реализация, а stat/mkdir не переопределены.

В Node.js v10.12.0 и более поздних версиях используйте собственный параметр fs.mkdir(p, ), если параметр fs.mkdir / fs.mkdirSync не был переопределен параметром.

  • Если путь является корневым каталогом, передать его базовой реализации и вернуть результат/ошибку. (В этом случае он либо завершится успешно, либо потерпит неудачу, но на самом деле мы не создаем никаких каталогов.)
  • Пройдите по пути, содержащему каждый каталог, чтобы найти первый путь, который будет создан, сделан .
  • Вызвать fs.mkdir(path, < recursive: true >) (или fs.mkdirSync )
  • В случае ошибки сообщите об этом вызывающему абоненту.
  • Возврат осуществлен .
  • Вызов базовой реализации fs.mkdir с рекурсией: false
  • Если ошибка:
    • Если path является корневым каталогом, подняться до вызывающего и не обрабатывать его
    • Если ENOENT, mkdirp родительского каталога, сохранить результат как созданный
    • stat(путь)
      • В случае ошибки вызвать исходную ошибку mkdir
      • Если каталог, возврат сделан
      • В противном случае возникает исходная ошибка mkdir.
      • возвратить undefined, если корневой каталог, или made, если задан, или путь

      предупреждение о Windows и Unix

      В файловых системах Windows попытки создать корневой каталог (т. е. букву диска или корневой путь UNC) не увенчаются успехом. Если корневой каталог существует, произойдет сбой с EPERM. Если корневой каталог не существует, произойдет сбой с ENOENT .

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

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

      собственное предупреждение об ошибке

      Чтобы обойти эту проблему, при возникновении ошибки ENOENT собственная реализация вернется к ручной реализации.

      выбор рекурсивной реализации mkdir

      Есть несколько на выбор! Используйте тот, который лучше всего соответствует вашим потребностям :D

      • Вы хотите оптимизировать производительность даже за счет других факторов.
      • Вам не нужно знать первый созданный каталог.
      • Вы можете получить ENOENT в качестве ошибки, когда фактической причиной является какая-то другая проблема.
      • Вы можете ограничить свои платформы Node.js версии 10.12 и выше.
      • Вы можете использовать обратные вызовы вместо промисов.
      • Вам не нужен CLI.
      • Вам не нужно переопределять используемые методы fs.

      используйте этот модуль (mkdirp 1.x), если:

      • Вам нужно знать первый созданный каталог.
      • Вы хотите использовать нативную реализацию, если она доступна, но отказаться, если она недоступна.
      • Вы предпочитаете API-интерфейсы, возвращающие обещания, а не API-интерфейсы, принимающие обратные вызовы.
      • Вам нужно больше полезных сообщений об ошибках, чем предоставляет собственный рекурсивный mkdir (по крайней мере, начиная с Node.js версии 13.4), и вы можете повторить попытку ENOENT для достижения этой цели.
      • Вам нужен (или, по крайней мере, вас устраивает) интерфейс командной строки.
      • Необходимо переопределить используемые методы fs.
      • Вам не нужно знать первый созданный каталог (по этой причине вы хотите сохранить несколько вызовов статистики при использовании собственной реализации).
      • Вы хотите использовать нативную реализацию, если она доступна, но отказаться, если она недоступна.
      • Вы предпочитаете API-интерфейсы, возвращающие обещания, а не API-интерфейсы, принимающие обратные вызовы.
      • Вы можете иногда получать ошибки ENOENT из-за сбоев, которые на самом деле связаны с чем-то другим, а не с отсутствующей записью в файловой системе.
      • Вам не нужен CLI.
      • Необходимо переопределить используемые методы fs.

      используйте mkdirp 0.x, если:

      • Вам нужно знать первый созданный каталог.
      • Вам нужен (или, по крайней мере, вас устраивает) интерфейс командной строки.
      • Необходимо переопределить используемые методы fs.
      • Вы можете использовать обратные вызовы вместо промисов.
      • Вы работаете не в Windows, где ошибки ENOENT корневого уровня могут привести к бесконечному регрессу.
      • Вы думаете, что винил просто звучит теплее и богаче по какой-то странной причине.
      • Вы поддерживаете действительно древние версии Node.js, еще до появления примитива языка Promise. (Пожалуйста, не надо. Вы заслуживаете лучшего.)

      Этот пакет также поставляется с командой mkdirp.

      чтобы получить библиотеку локально или

      чтобы получить команду везде, или

      для запуска команды без ее глобальной установки.

      Этот модуль работает на узле v8, но официально поддерживаются только v10 и выше, так как Node v8 достиг конца срока службы LTS 01.01.2020, что на момент написания этой статьи было в прошлом.

      С помощью mkdir вы также можете устанавливать разрешения, создавать несколько каталогов (папок) одновременно и многое другое.

      В этом руководстве показано, как использовать команду mkdir в Linux.

       изображение заголовка Как создавать каталоги в Linux с помощью команды mkdir

      • Linux или UNIX-подобная система.
      • Доступ к терминалу/командной строке.
      • Пользователь с разрешениями на создание и изменение настроек каталога.

      Синтаксис команды mkdir в Linux

      Основная команда для создания каталогов в Linux состоит из команды mkdir и имени каталога. Поскольку вы можете добавлять параметры к этой команде, синтаксис выглядит следующим образом:

      Чтобы лучше понять, как использовать mkdir , обратитесь к примерам, которые мы приводим в остальной части руководства.

      Совет: используйте cd, чтобы перейти к каталогу, в котором вы хотите создать подкаталог. Вы также можете использовать прямой путь. Используйте ls, чтобы получить список каталогов в текущем местоположении.

      Как создать новый каталог в Linux

      Чтобы создать каталог с помощью терминала, передайте нужное имя команде mkdir.

      В этом примере мы создали каталог Linux на рабочем столе. Помните, что команды и параметры в Linux чувствительны к регистру.

      Если операция выполнена успешно, терминал возвращает пустую строку.

      Для проверки используйте ls .

      Примечание. Чтобы создать скрытый каталог, следуйте нашему руководству по отображению и созданию скрытых файлов в Linux.

      Как создать несколько каталогов с помощью mkdir

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

      Для этого используйте фигурные скобки <> с mkdir и укажите имена каталогов, разделенные запятой.

      Не добавляйте пробелы в фигурные скобки для имен каталогов. Если вы это сделаете, рассматриваемые имена будут содержать дополнительные символы:

      Как создать родительские каталоги

      Для построения структуры с несколькими подкаталогами с помощью mkdir необходимо добавить параметр -p. Это гарантирует, что mkdir добавит в процессе все отсутствующие родительские каталоги.

      Например, если вы хотите создать «dirtest2» в «dirtest1» внутри каталога Linux (т. е. Linux /dirtest1/dirtest2), выполните команду:

      пример создания нового каталога в linux

      Используйте ls -R, чтобы отобразить рекурсивное дерево каталогов.

      Без параметра -p терминал возвращает ошибку, если один из каталогов в строке не существует.

      сообщение об ошибке в терминале: каталог не существует или не может быть найден

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

      Команда mkdir по умолчанию предоставляет разрешения rwx только для текущего пользователя.
      Чтобы добавить права на чтение, запись и выполнение для всех пользователей, добавьте параметр -m с пользователем 777 при создании каталога.

      Чтобы создать каталог DirM с разрешениями rwx:

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

      Чтобы вывести список всех каталогов и показать наборы разрешений: -l

      Каталог с разрешениями rwx для всех пользователей выделен. Как вы можете видеть на изображении выше, два других каталога по умолчанию имеют разрешение rwx для владельца, xr для группы и x для других пользователей.

      Как проверить каталоги

      При выполнении команд mkdir нет обратной связи об успешных операциях. Чтобы просмотреть сведения о процессе mkdir, добавьте параметр -v к команде терминала.

      Давайте создадим каталог Details внутри Dir1 и распечатаем статус операции:

      пример подробностей нового каталога, созданного в Linux

      Получив обратную связь от процесса, вам не нужно запускать команду ls, чтобы убедиться, что каталог создан.

      Параметры команды mkdir и краткое описание синтаксиса

      Опция/СинтаксисОписание
      mkdir имя_каталога Создает каталог в текущее местоположение
      mkdir Создает несколько каталогов в текущем местоположении. Не используйте пробелы внутри <>
      mkdir –p directory/path/newdir Создает структуру каталогов с отсутствующими родительскими каталогами (если они есть)< /td>
      mkdir –m777 имя_каталога Создает каталог и устанавливает полные права на чтение, запись и выполнение для всех пользователей
      mkdir –v имя_каталога(ов) Создает каталог в текущем местоположении

      Примечание. Научитесь полностью управлять каталогами, научившись перемещать каталог в системе, на которой запущен дистрибутив Linux.

      В этом руководстве описаны все команды, необходимые для создания каталогов в Linux.

      Теперь вы понимаете, как использовать команду Linux mkdir. Он прост и удобен в использовании.

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

      mkdir -p создаст каталог; он также создаст родительские каталоги по мере необходимости.

      Существует ли аналогичная команда для файлов, которая создаст файл и родительские каталоги по мере необходимости?


      Не то, чтобы я знал об этом... но вы могли бы просто сделать mkdir -p /path/to/make && touch /path/to/file. Что сделало бы пустой файл в этой новой структуре каталогов, которую вы создали по мере необходимости.

      8 ответов 8

      Утилита установки сделает это, если ей предоставлен исходный файл /dev/null . Аргумент -D указывает на необходимость создания всех родительских каталогов:

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


      Нет, насколько мне известно. Но вы всегда можете использовать mkdir -p и касаться друг друга:


      Я часто сталкивался с подобными ситуациями, поэтому просто написал функцию в своем файле .bashrc. Выглядит так

      Итак, когда я хочу создать файл внутри пути к несуществующим каталогам, я скажу


      $_ — это параметр оболочки, он расширяется до последнего аргумента предыдущей команды. Пример mkdir test && cd "$_" создаст и cd в каталог test .


      Можно "подделать".

      Сначала немного теории:

      xargs может ссылаться на заполнитель ( <> ) с флагом -I, который содержит значение для каждого аргумента, переданного в xargs . Вот разница между этим флагом и без него:

      xargs также может запускать произвольные команды оболочки с флагом sh -c:

      Объединение концепций:

      Мы можем объединить эти концепции с помощью mkdir -p вместо mkdir и концепции в ответе @ldx, чтобы получить следующее:

      Эта команда в основном сопоставляет каждое имя файла в списке файлов, разделенных строками, отсекает файловую часть, создает каталоги с помощью mkdir -p, а затем касается имени файла в соответствующем каталоге.

      Команда mkdir используется для создания новых каталогов в Linux. В этой статье я покажу вам, как использовать команду mkdir для создания каталогов из командной строки в Linux. Я собираюсь использовать Ubuntu 18.04 LTS для демонстрации, но любой дистрибутив Linux подойдет для опробования приведенных здесь примеров. Итак, приступим.

      Абсолютный путь и относительный путь:

      В Linux существует два типа пути. Абсолютный путь и относительный путь. Четкое понимание этих терминов необходимо для работы с командой mkdir.

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

      Например, /db/mysql/data — это абсолютный путь к каталогу. /etc/fstab — это абсолютный путь к файлу.

      Относительный путь: Относительный путь рассчитывается от текущего рабочего каталога. Он может начинаться с ./ или без него, но не может начинаться с /

      Вы можете напечатать текущий путь к рабочему каталогу с помощью команды pwd следующим образом:


      Теперь, если путь к каталогу ./db/mysql/data или просто db/mysql/data, то он фактически находится внутри родительского каталога /home/shovon. Обратите внимание, что нам не нужно вводить полный или абсолютный путь /home/shovon/db/mysql/data.

      Абсолютные пути значительно упрощают работу с командой mkdir.

      Создание каталога с помощью mkdir:

      Это самое простое и наиболее распространенное использование mkdir. Вы можете очень легко создать новый каталог с помощью mkdir.

      Чтобы создать новый каталог files/ (скажем) в текущем рабочем каталоге, выполните следующую команду:


      Как видите, создается новый каталог files/.


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

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


      Эта команда создает новый каталог iso/ внутри каталога /mnt. Как видите, мне не нужно было переходить в каталог /mnt.


      Создание каталога вместе с родительскими каталогами с помощью mkdir:

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


      К счастью, у mkdir есть флаг -p или –parents, который создаст необходимые родительские каталоги, если они не существуют.

      Например, вы хотите переместить каталог данных MySQL в /db/mysql/data. Но на данный момент ни один из родительских каталогов не существует. Таким образом, вместо использования команды 3 mkdir вы можете запустить одну команду, чтобы сообщить mkdir о создании родительских каталогов по мере необходимости.


      Как видите, родительские каталоги создаются по мере необходимости.

      Mkdir с флагом -o также может автоматически создавать родительские каталоги для относительных путей.

      Например, предположим, вы хотите создать новый каталог project/python-test в текущем рабочем каталоге. Для этого запустите mkdir следующим образом:


      Как вы можете видеть, каталог project/python-test создается внутри текущего рабочего каталога.


      Создание нескольких каталогов с помощью mkdir:

      При желании вы можете создать несколько каталогов с помощью одной команды mkdir.

      Допустим, вы хотите создать 3 каталога nodejs/, python/, java/ внутри вашего текущего рабочего каталога ~/projects. Чтобы создать все эти каталоги, запустите mkdir следующим образом:


      Как видите, необходимые каталоги созданы.


      Снова, допустим, вы хотите создать несколько каталогов для баз данных mysql, mariadb, mongodb, используя абсолютный путь. Вы также хотите создать любые родительские каталоги по мере необходимости. Для этого запустите команду mkdir следующим образом:


      Как видите, все необходимые каталоги создаются одновременно.


      Здесь пути к каталогам: /db/mysql/data, /db/mariadb/data, /db/mongodb/data. Что меняется в каждом пути к каталогу? Ну и каталоги второго уровня mysql, mariadb, mongodb. Таким образом, мы можем поместить его в фигурные скобки без пробелов как /db//data. Довольно просто.

      Подробный режим mkdir:

      По умолчанию mkdir не выводит никаких сообщений на экран, если команда выполняется успешно. Печатаются только сообщения об ошибках. Если вы хотите, чтобы mkdir печатал сообщения на экране, вы можете использовать флаг -v или флаг –verbose.

      Та же команда из предыдущего раздела может быть записана следующим образом.

      Как видите, mkdir теперь выводит сообщение при создании каталогов.


      Вот как вы используете команду mkdir в Linux. Спасибо, что прочитали эту статью.

      Читайте также: