¿Es posible crear un directorio de varios niveles?

¿Es posible crear un directorio de varios niveles?

Usando mkdir()(la función C) puedo crear un directorio de 1 nivel, si quiero crear un directorio multinivel como:

folder/subfolder/subsubfolder

¿Es posible? ¿si es así, cómo?

Respuesta1

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

Respuesta2

mkdir -p /dir1/dir2/dir3

Consulte la página de manual para obtener más detalles:

man mkdir

Respuesta3

Algo parecido a:

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

o:

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

La primera forma siempre debería funcionar. La segunda forma sólo debería funcionar si su ruta comienza con una barra diagonal, porque se repetirá en rutas que comiencen con un punto.

Respuesta4

En caso de que -pno esté disponible, las listas de argumentos normalmente se analizan en el orden en que aparecen en la línea de comando, por lo tanto:

mkdir adam adam/bertil adam/bertil/caesar

es funcionalmente equivalente a

mkdir -p adam/bertil/caesar

información relacionada