3.5 创建长路径目录
有时候,我们需要创建一个空目录树。如果给定路径中包含目录,那么还必须检查这些目录是否已经存在。这会使得代码变得臃肿而低效。这则攻略就是来解决这个问题的。
3.5.1 预备知识
mkdir
命令用于创建目录。例如:
- $ mkdir dirpath
如果目录已经存在,会返回“File exists”错误信息:
- 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)。
下面的代码可找出路径中的每个目录是否存在:
if [ -e /home/slynux ]; then
# 创建下一级目录
fi
-e
是一个用在条件判断 [ ] 中的参数,可用以判断某个文件是否存在。在类UNIX系统中,目录同样是一种文件。如果该文件存在,[ -e FILE_PATH ]
返回真。
3.5.2 实战演练
下面的命令序列可用以创建多级目录树:
- $ mkdir /home 2> /dev/null
- $ mkdir /home/slynux 2> /dev/null
- $ mkdir /home/slynux/test 2> /dev/null
- $ mkdir /home/slynux/test/hello 2> /dev/null
- $ mkdir /home/slynux/test/hello/child 2> /dev/null
如果遇到“Directory exists”这种错误,该命令会被忽略,错误信息通过2>
被重定向到/dev/null。不过这种方法用起来太烦琐,而且也不是标准做法。进行这一操作的标准单行命令如下:
- $ mkdir -p /home/slynux/test/hello/child
这条单行命令足以取代之前的那5条命令。它会忽略所有已存在的目录,同时创建缺失的部分。