(C関数)を使用してmkdir()
マルチレベルディレクトリを作成したい場合は、シングルレベルディレクトリを作成できます。たとえば、次のようになります。
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);
}
最初の方法は常に機能するはずです。 2番目の方法は点で始まるパスを繰り返すので、パスがスラッシュで始まる場合にのみ機能します。
答え4
使用できない場合、-p
引数リストは通常、コマンドラインに表示される順序で解析されます。
mkdir adam adam/bertil adam/bertil/caesar
機能的に同じ
mkdir -p adam/bertil/caesar