![複数レベルのディレクトリを作成することは可能ですか?](https://rvso.com/image/31667/%E8%A4%87%E6%95%B0%E3%83%AC%E3%83%99%E3%83%AB%E3%81%AE%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%E3%81%8B%3F%20.png)
次のような 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