3.5 创建长路径目录

有时候,我们需要创建一个空目录树。如果给定路径中包含目录,那么还必须检查这些目录是否已经存在。这会使得代码变得臃肿而低效。这则攻略就是来解决这个问题的。

3.5.1 预备知识

mkdir命令用于创建目录。例如:

  1. $ mkdir dirpath

如果目录已经存在,会返回“File exists”错误信息:

  1. mkdir: cannot create directory `dir_name': File exists

如果给你一个目录路径(/home/slynux/test/hello/child),其中 /home/slynux 已经存在,那么我们需要创建路径中余下的目录(/home/slynux/test、/home/slynux/test/hello和 /home/slynux/test/hello/child)。

下面的代码可找出路径中的每个目录是否存在:

  1. if [ -e /home/slynux ]; then
  2. # 创建下一级目录
  3. fi

-e是一个用在条件判断 [ ] 中的参数,可用以判断某个文件是否存在。在类UNIX系统中,目录同样是一种文件。如果该文件存在,[ -e FILE_PATH ] 返回真。

3.5.2 实战演练

下面的命令序列可用以创建多级目录树:

  1. $ mkdir /home 2> /dev/null
  2. $ mkdir /home/slynux 2> /dev/null
  3. $ mkdir /home/slynux/test 2> /dev/null
  4. $ mkdir /home/slynux/test/hello 2> /dev/null
  5. $ mkdir /home/slynux/test/hello/child 2> /dev/null

如果遇到“Directory exists”这种错误,该命令会被忽略,错误信息通过2> 被重定向到/dev/null。不过这种方法用起来太烦琐,而且也不是标准做法。进行这一操作的标准单行命令如下:

  1. $ mkdir -p /home/slynux/test/hello/child

这条单行命令足以取代之前的那5条命令。它会忽略所有已存在的目录,同时创建缺失的部分。