É possível criar um diretório multinível?

É possível criar um diretório multinível?

Usando mkdir()(a função C), posso criar um diretório de 1 nível, se quiser criar um diretório multi_nível como:

folder/subfolder/subsubfolder

É possível? se sim, como?

Responder1

mkdir --parents folder/subfolder/subsubfolder
mkdir -p folder/subfolder/subsubfolder

Responder2

mkdir -p /dir1/dir2/dir3

Por favor, verifique a página de manual para obter detalhes:

man mkdir

Responder3

Algo como:

#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);
}

ou:

#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);
}

A primeira maneira deve sempre funcionar. A segunda maneira só deve funcionar se o seu caminho começar com uma barra final, porque ele fará um loop em caminhos que começam com um ponto.

Responder4

Caso -pnão esteja disponível, as listas de argumentos são normalmente analisadas na ordem em que aparecem na linha de comando, assim:

mkdir adam adam/bertil adam/bertil/caesar

é funcionalmente equivalente a

mkdir -p adam/bertil/caesar

informação relacionada