Mkdir 的“-p”选项

因此,这似乎不是一个非常复杂的问题,我有,但这是一个我无法找到答案。我对在 Unix 中 -p选项的作用感到困惑。我用它来完成一个实验任务,同时创建一个子目录,然后在这个子目录中创建另一个子目录。它看起来像这样:

mkdir -p cmps012m/lab1

这是一个具有正常权限的私有目录(rlidwka)。哦,谁能给我解释一下 rlidwka是什么意思?我并不是 Unix 的菜鸟,但我并不真正了解这意味着什么。希望这个问题不会太模糊。

161826 次浏览

手册页是你能找到的最好的信息来源... ... 而且就在你的指尖: man mkdir产生了这个关于 -p开关的信息:

-p, --parents
no error if existing, make parent directories as needed

用例示例: 假设我想创建目录 hello/goodbye,但不存在:

$mkdir hello/goodbye
mkdir:cannot create directory 'hello/goodbye': No such file or directory
$mkdir -p hello/goodbye
$

-p同时创建了 hellogoodbye

这意味着 该命令将创建满足请求所需的所有目录,如果该目录存在,则不返回任何错误

关于 rlidwka,Google 对于首字母缩写词有很好的记忆力:)我的搜索返回了这个例子: http://www.cs.cmu.edu/~help/afs/afs_acls.html

 Directory permissions


l (lookup)
Allows one to list the contents of a directory. It does not allow the reading of files.
i (insert)
Allows one to create new files in a directory or copy new files to a directory.
d (delete)
Allows one to remove files and sub-directories from a directory.
a (administer)
Allows one to change a directory's ACL. The owner of a directory can always change the ACL of a directory that s/he owns, along with the ACLs of any subdirectories in that directory.


File permissions


r (read)
Allows one to read the contents of file in the directory.
w (write)
Allows one to modify the contents of files in a directory and use chmod on them.
k (lock)
Allows programs to lock files in a directory.

因此 rlidwka的意思是: 所有权限

值得一提的是,正如@KeithThompson 在评论中指出的,并非所有 Unix 系统都支持 ACL。所以 rlidwka的概念可能不适用于这里。

请注意,-pmkdir命令的参数,而不是整个 Unix。每个命令都可以有它需要的任何参数。

在这种情况下,它意味着“父目录”,意味着 mkdir将创建一个目录和任何不存在的父目录。

如果尝试使用 top-down方法创建目录,则将使用 -p|--parent。这将创建父目录,然后子目录等如果不存在。

- P-父母 如果存在则没有错误,根据需要创建父目录

关于 rlidwka,它意味着给予完全或管理访问权限。

Mkdir [-switch ]文件夹名

-p是一个开关,它是可选的。即使父文件夹不存在,它也会创建一个子文件夹和一个父文件夹。

来自手册页:

-p, --parents no error if existing, make parent directories as needed

例如:

mkdir -p storage/framework/{sessions,views,cache}

这将创建子文件夹会话、视图、在框架文件夹内缓存,而不管“框架”是否在早期可用。

PATH: 很久以前就有人回答了这个问题,但是,把-p 看作“ PATH”(更容易记住)可能更有帮助,因为这会导致 mkdir 创建路径的每个部分,而这些部分并不存在。

Mkdir-p/usr/bin/comm/diff/er/ence

如果/usr/bin/comm 已经存在,那么它的作用是: Mkdir/usr/bin/comm/diff Mkdir/usr/bin/comm/diff/er Mkdir/usr/bin/comm/diff/er/fence

正如您所看到的,它节省了您一点点的输入和思考,因为您不必弄清楚什么已经存在,什么没有。