
Используя mkdir()
(функцию C), я могу создать одноуровневый каталог, если я хочу создать многоуровневый каталог, например:
folder/subfolder/subsubfolder
возможно ли это? если да, то как?
решение1
mkdir --parents folder/subfolder/subsubfolder
mkdir -p folder/subfolder/subsubfolder
решение2
mkdir -p /dir1/dir2/dir3
Подробности смотрите на странице руководства:
man mkdir
решение3
Что-то вроде этого:
#include <libgen.h>
// safe
void mkdir_recursive(const char *path)
{
char *subpath, *fullpath;
fullpath = strdup(path);
subpath = dirname(fullpath);
if (strlen(subpath) > 1)
mkdir_recursive(subpath);
mkdir(path);
free(fullpath);
}
или:
#include <string.h>
// only pass a path starting with a trailing slash
// (if path starts with a dot, it will loop and crash)
void mkdir_recursive(const char *path)
{
char *subpath, *fullpath;
fullpath = strdup(path);
subpath = basename(fullpath);
if (strlen(subpath) > 0)
mkdir_recursive(subpath);
mkdir(path);
free(fullpath);
}
Первый способ должен работать всегда. Второй способ должен работать только если ваш путь начинается с завершающего слеша, потому что он будет зацикливаться на путях, начинающихся с точки.
решение4
В случае -p
отсутствия аргументов списки аргументов обычно анализируются в том порядке, в котором они указаны в командной строке, например:
mkdir adam adam/bertil adam/bertil/caesar
функционально эквивалентно
mkdir -p adam/bertil/caesar