0

有两个shell命令:

[[ ! -d $TRACEDIR/pattrace/rpt/.tracking ]] && mkdir $TRACEDIR/pattrace/rpt/.tracking  
[[ ! -d $TRACEDIR/pattrace/rpt/.tracking ]] && mkdir -p $TRACEDIR/pattrace/rpt/.tracking

显然,这些命令之间的唯一区别是-p标志。但是这个标志在这种情况下做了什么?

谢谢。

4

2 回答 2

4

mkdir 手册页

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

换句话说,如果需要的目录不存在,它们将根据需要创建。如果目录已经存在,则不会导致错误。

这是查找手册页的好地方(当然除了使用 google)

于 2012-07-16T11:39:44.797 回答
2

mkdir使用该-p选项将创建指定路径的所有必要父目录,如果它们不存在(参见手册页)。此外,-p如果目录本身已经存在,您将不会收到错误消息。

在您的特定情况下,第一个命令可能会失败,因为对完整路径的测试不够。如果仅存在,测试也将失败,$TRACEDIR/但随后mkdir将失败,因为它需要$TRACEDIR/pattrace/rpt/存在。

第二个命令将起作用,因为也会mkdir -p在“中间”创建所有缺少的目录。

于 2012-07-16T11:39:12.567 回答