複数レベルのディレクトリを作成することは可能ですか?

複数レベルのディレクトリを作成することは可能ですか?

次のような multi_level ディレクトリを作成したい場合は、(C 関数)を使用してmkdir()1 レベルのディレクトリを作成できます。

folder/subfolder/subsubfolder

それは可能ですか?もし可能ならば、どのようにですか?

答え1

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

答え2

mkdir -p /dir1/dir2/dir3

詳細については、man ページを確認してください。

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

最初の方法は常に機能します。2 番目の方法は、パスが末尾のスラッシュで始まる場合にのみ機能します。これは、ドットで始まるパスでループするためです。

答え4

が利用できない場合は-p、引数リストは通常​​、コマンド ラインに表示される順序で解析されます。つまり、次のようになります。

mkdir adam adam/bertil adam/bertil/caesar

機能的には同等である

mkdir -p adam/bertil/caesar

関連情報