![是否可以建立多層目錄?](https://rvso.com/image/31667/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%BB%BA%E7%AB%8B%E5%A4%9A%E5%B1%A4%E7%9B%AE%E9%8C%84%EF%BC%9F%20.png)
使用mkdir()
(C 函數)我可以建立一個一級目錄,如果我想建立多層目錄,例如:
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);
}
第一種方法應該總是有效。第二種方法僅適用於路徑以斜線開頭的情況,因為它將在以點開頭的路徑上循環。
答案4
如果-p
不可用,參數清單通常會按照它們在命令列上出現的順序進行解析,因此:
mkdir adam adam/bertil adam/bertil/caesar
在功能上等同於
mkdir -p adam/bertil/caesar