用Linux的命令行的人都知道,mkdir命令是用来创建目录的。
并且 -p参数可以创建多级目录,假如指定的上级目录不存在,会依次创建
看一个简单的例子,当前目录是没有11/22/33这样的目录树的,我们创建之。
- [root@*** ~]# ll
- total 188
- -rw------- 1 root root 1463 Sep 3 02:19 anaconda-ks.cfg
- drwxr-xr-x 2 root root 4096 Sep 2 18:32 Desktop
- -rw-r--r-- 1 root root 40359 Sep 3 02:19 install.log
- -rw-r--r-- 1 root root 6040 Sep 3 02:18 install.log.syslog
- -rw------- 1 root root 13424 Dec 5 21:40 mbox
- drwxrwxrwx 2 root root 4096 Sep 4 23:28 nfstest
- -rw-r--r-- 1 root root 73126 Sep 2 18:28 scsconfig.log
- -rw-r--r-- 1 root root 195 Sep 2 18:28 scsrun.log
- -rw-r--r-- 1 root root 4 Dec 9 22:37 test_rsync_128
- -rw-r--r-- 1 root root 0 Dec 9 21:34 test_rsync_129
- -rw-r--r-- 1 root root 0 Nov 28 21:46 upgrade.log
- -rw-r--r-- 1 root root 0 Nov 28 21:46 upgrade.log.syslog
用命令mkdir -p参数创建,沿着指定的目录树结构创建,假如上级目录不存在,系统也会去创建上级目录。
- [root@*** ~]# mkdir -p 11/22/33
- [root@*** ~]#
- [root@*** ~]# ll
- total 192
- drwxr-xr-x 3 root root 4096 Jan 10 21:00 11
- -rw------- 1 root root 1463 Sep 3 02:19 anaconda-ks.cfg
- drwxr-xr-x 2 root root 4096 Sep 2 18:32 Desktop
- -rw-r--r-- 1 root root 40359 Sep 3 02:19 install.log
- -rw-r--r-- 1 root root 6040 Sep 3 02:18 install.log.syslog
- -rw------- 1 root root 13424 Dec 5 21:40 mbox
- drwxrwxrwx 2 root root 4096 Sep 4 23:28 nfstest
- -rw-r--r-- 1 root root 73126 Sep 2 18:28 scsconfig.log
- -rw-r--r-- 1 root root 195 Sep 2 18:28 scsrun.log
- -rw-r--r-- 1 root root 4 Dec 9 22:37 test_rsync_128
- -rw-r--r-- 1 root root 0 Dec 9 21:34 test_rsync_129
- -rw-r--r-- 1 root root 0 Nov 28 21:46 upgrade.log
- -rw-r--r-- 1 root root 0 Nov 28 21:46 upgrade.log.syslog
- [root@*** ~]# tree 11
- 11
- `-- 22
- `-- 33
- 2 directories, 0 files
那么,有没有方法一次性创建多个同级目录呢?比如,要创建a目录下的三个同级子目录b,c,d,有没有方法?
比如 一次性创建这样的目录 a/b/c a/b/d
可以的,这就要用到mkdir的{}参数
- [root@*** ~]# mkdir -p a/b/{c,d}
- [root@*** ~]#
- [root@*** ~]# ll
- total 196
- drwxr-xr-x 3 root root 4096 Jan 10 21:00 11
- drwxr-xr-x 3 root root 4096 Jan 10 21:03 a
- -rw------- 1 root root 1463 Sep 3 02:19 anaconda-ks.cfg
- drwxr-xr-x 2 root root 4096 Sep 2 18:32 Desktop
- -rw-r--r-- 1 root root 40359 Sep 3 02:19 install.log
- -rw-r--r-- 1 root root 6040 Sep 3 02:18 install.log.syslog
- -rw------- 1 root root 13424 Dec 5 21:40 mbox
- drwxrwxrwx 2 root root 4096 Sep 4 23:28 nfstest
- -rw-r--r-- 1 root root 73126 Sep 2 18:28 scsconfig.log
- -rw-r--r-- 1 root root 195 Sep 2 18:28 scsrun.log
- -rw-r--r-- 1 root root 4 Dec 9 22:37 test_rsync_128
- -rw-r--r-- 1 root root 0 Dec 9 21:34 test_rsync_129
- -rw-r--r-- 1 root root 0 Nov 28 21:46 upgrade.log
- -rw-r--r-- 1 root root 0 Nov 28 21:46 upgrade.log.syslog
- [root@*** ~]# tree a
- a
- `-- b
- |-- c
- `-- d
{}参数也可以这样用
- [root@*** ~]# mkdir -p 1/{2,3}/{4,5}
- [root@*** ~]# tree 1
- 1
- |-- 2
- | |-- 4
- | `-- 5
- `-- 3
- |-- 4
- `-- 5
- 6 directories, 0 files
- [root@*** ~]# mkdir -p aa/bb/{cc,dd}
- [root@*** ~]#
- [root@*** ~]# tree aa
- aa
- `-- bb
- |-- cc
- `-- dd
从上面,可以看到,在mkdir命令中,{}参数用于创建同级目录,也就是说在{}中指定的目录是相同级别的,这些目录之间用逗号隔开,并且,针对形如{aa,bb}/{cc,dd}是这样的对应关系:
aa --->cc ;aa--->dd
bb --->cc; bb--->dd
那么要一次性创建更复杂的目录树呢?
可以的,记住上面讲的,mkdir的{}参数中,使用逗号隔开的是同级目录,用/隔开的是父子级目录,明白的这样的道理,就可以做到一次性创建更复杂的目录结构了。
比如,要创建这样的目录,这种多级复杂的目录,在项目开发中会用到,比如从根目录(相对而言,不是系统的根目录,是项目的根目录)往下,有多级子目录,各个子目录下又有多级子目录,分别存放可执行文件,文档等等。
(这个例子,来源于http://codingstandards.iteye.com/blog/1129162,本人采用了和原作者略不同的方法,其实,就是写法不太一样,无本质区别)。
该例子作者的写法是:
- [root@*** ~]# mkdir -p project/{bin,demo/stat/a,doc/{html,info,pdf},lib/ext,src}
- [root@*** ~]#
- [root@*** ~]# tree project/
- project/
- |-- bin
- |-- demo
- | `-- stat
- | `-- a
- |-- doc
- | |-- html
- | |-- info
- |-- lib
- | `-- ext
- `-- 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)
本文出自 “linux与网络那些事” 博客,请务必保留此出处http://khaozi.blog.51cto.com/952782/1113888