用Linux的命令行的人都知道,mkdir命令是用来创建目录的。

并且 -p参数可以创建多级目录,假如指定的上级目录不存在,会依次创建

看一个简单的例子,当前目录是没有11/22/33这样的目录树的,我们创建之。

 

 

 
  
  1. [root@*** ~]# ll  
  2. total 188  
  3. -rw------- 1 root root  1463 Sep  3 02:19 anaconda-ks.cfg  
  4. drwxr-xr-x 2 root root  4096 Sep  2 18:32 Desktop  
  5. -rw-r--r-- 1 root root 40359 Sep  3 02:19 install.log  
  6. -rw-r--r-- 1 root root  6040 Sep  3 02:18 install.log.syslog  
  7. -rw------- 1 root root 13424 Dec  5 21:40 mbox  
  8. drwxrwxrwx 2 root root  4096 Sep  4 23:28 nfstest  
  9. -rw-r--r-- 1 root root 73126 Sep  2 18:28 scsconfig.log  
  10. -rw-r--r-- 1 root root   195 Sep  2 18:28 scsrun.log  
  11. -rw-r--r-- 1 root root     4 Dec  9 22:37 test_rsync_128  
  12. -rw-r--r-- 1 root root     0 Dec  9 21:34 test_rsync_129  
  13. -rw-r--r-- 1 root root     0 Nov 28 21:46 upgrade.log  
  14. -rw-r--r-- 1 root root     0 Nov 28 21:46 upgrade.log.syslog 

用命令mkdir  -p参数创建,沿着指定的目录树结构创建,假如上级目录不存在,系统也会去创建上级目录。

 

 
  
  1. [root@*** ~]# mkdir -p 11/22/33  
  2. [root@*** ~]#   
  3. [root@*** ~]# ll  
  4. total 192  
  5. drwxr-xr-x 3 root root  4096 Jan 10 21:00 11  
  6. -rw------- 1 root root  1463 Sep  3 02:19 anaconda-ks.cfg  
  7. drwxr-xr-x 2 root root  4096 Sep  2 18:32 Desktop  
  8. -rw-r--r-- 1 root root 40359 Sep  3 02:19 install.log  
  9. -rw-r--r-- 1 root root  6040 Sep  3 02:18 install.log.syslog  
  10. -rw------- 1 root root 13424 Dec  5 21:40 mbox  
  11. drwxrwxrwx 2 root root  4096 Sep  4 23:28 nfstest  
  12. -rw-r--r-- 1 root root 73126 Sep  2 18:28 scsconfig.log  
  13. -rw-r--r-- 1 root root   195 Sep  2 18:28 scsrun.log  
  14. -rw-r--r-- 1 root root     4 Dec  9 22:37 test_rsync_128  
  15. -rw-r--r-- 1 root root     0 Dec  9 21:34 test_rsync_129  
  16. -rw-r--r-- 1 root root     0 Nov 28 21:46 upgrade.log  
  17. -rw-r--r-- 1 root root     0 Nov 28 21:46 upgrade.log.syslog  
  18. [root@*** ~]# tree 11  
  19. 11  
  20. `-- 22  
  21.     `-- 33  
  22.  
  23. 2 directories, 0 files 

 

那么,有没有方法一次性创建多个同级目录呢?比如,要创建a目录下的三个同级子目录b,c,d,有没有方法?

比如 一次性创建这样的目录  a/b/c   a/b/d

可以的,这就要用到mkdir的{}参数

 

 
  
  1. [root@*** ~]# mkdir -p a/b/{c,d}  
  2. [root@*** ~]#   
  3. [root@*** ~]# ll  
  4. total 196  
  5. drwxr-xr-x 3 root root  4096 Jan 10 21:00 11  
  6. drwxr-xr-x 3 root root  4096 Jan 10 21:03 a  
  7. -rw------- 1 root root  1463 Sep  3 02:19 anaconda-ks.cfg  
  8. drwxr-xr-x 2 root root  4096 Sep  2 18:32 Desktop  
  9. -rw-r--r-- 1 root root 40359 Sep  3 02:19 install.log  
  10. -rw-r--r-- 1 root root  6040 Sep  3 02:18 install.log.syslog  
  11. -rw------- 1 root root 13424 Dec  5 21:40 mbox  
  12. drwxrwxrwx 2 root root  4096 Sep  4 23:28 nfstest  
  13. -rw-r--r-- 1 root root 73126 Sep  2 18:28 scsconfig.log  
  14. -rw-r--r-- 1 root root   195 Sep  2 18:28 scsrun.log  
  15. -rw-r--r-- 1 root root     4 Dec  9 22:37 test_rsync_128  
  16. -rw-r--r-- 1 root root     0 Dec  9 21:34 test_rsync_129  
  17. -rw-r--r-- 1 root root     0 Nov 28 21:46 upgrade.log  
  18. -rw-r--r-- 1 root root     0 Nov 28 21:46 upgrade.log.syslog  
  19. [root@*** ~]# tree a  
  20. a  
  21. `-- b  
  22.     |-- c  
  23.     `-- d  

 

{}参数也可以这样用

 

 
  
  1. [root@*** ~]# mkdir -p 1/{2,3}/{4,5}  
  2. [root@*** ~]# tree 1  
  3. 1  
  4. |-- 2  
  5. |   |-- 4  
  6. |   `-- 5  
  7. `-- 3  
  8.     |-- 4  
  9.     `-- 5  
  10.  
  11. 6 directories, 0 files  
  12. [root@*** ~]# mkdir -p aa/bb/{cc,dd}  
  13. [root@*** ~]#   
  14. [root@*** ~]# tree aa  
  15. aa  
  16. `-- bb  
  17.     |-- cc  
  18.     `-- dd 

从上面,可以看到,在mkdir命令中,{}参数用于创建同级目录,也就是说在{}中指定的目录是相同级别的,这些目录之间用逗号隔开,并且,针对形如{aa,bb}/{cc,dd}是这样的对应关系:

aa --->cc  ;aa--->dd

bb --->cc; bb--->dd

那么要一次性创建更复杂的目录树呢?

可以的,记住上面讲的,mkdir的{}参数中,使用逗号隔开的是同级目录,用/隔开的是父子级目录,明白的这样的道理,就可以做到一次性创建更复杂的目录结构了。

比如,要创建这样的目录,这种多级复杂的目录,在项目开发中会用到,比如从根目录(相对而言,不是系统的根目录,是项目的根目录)往下,有多级子目录,各个子目录下又有多级子目录,分别存放可执行文件,文档等等。

 

mkdir

 

(这个例子,来源于http://codingstandards.iteye.com/blog/1129162,本人采用了和原作者略不同的方法,其实,就是写法不太一样,无本质区别)。

该例子作者的写法是:

mkdir-eg 

 
  
  1. [root@*** ~]# mkdir -p    project/{bin,demo/stat/a,doc/{html,info,pdf},lib/ext,src}  
  2. [root@*** ~]#   
  3. [root@*** ~]# tree project/  
  4. project/  
  5. |-- bin  
  6. |-- demo  
  7. |   `-- stat  
  8. |       `-- a  
  9. |-- doc  
  10. |   |-- html  
  11. |   |-- info  
  12. |   `-- pdf  
  13. |-- lib  
  14. |   `-- ext  
  15. `-- src 

 

只要明白了{}中用逗号指定同级目录,用/指定父子目录,并注意各个目录树上的各级目录的对应关系,就可以创建复杂的目录结构了。

 

BTW: 

逗号 : comma  

句号(英文句号,即实心句号):dot

冒号:colon

斜线:slash

反斜线:back slash

花括号:brace

方括号:brackets (or bracket,or square brackets,or square parenthesis)

圆括号:parenthesis

问号:interrogation

感叹号:exclamation mark

星号:asterisk (or star number)