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 -p
no 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