在 bash 中创建目录嵌套

在 bash 中创建目录嵌套

我想要一种更干净的方式来嵌套这个命令;

if [ ! -d $BACKUPDIR ]; then
  mkdir -p $BACKUPDIR
  mkdir -p $BACKUPDIR/directories
  mkdir -p $BACKUPDIR/databases
  mkdir -p $BACKUPDIR/logs
else
  :
fi

答案1

通过大括号扩展,你可以这样做

mkdir -p "$BACKUPDIR"/{directories,databases,logs}

如果您想确保子目录也存在,则可以直接运行mkdir而不进行测试。有了-p它,就不应该抱怨现有目录,并且不会有主目录$BACKUPDIR存在但子目录丢失的情况。

(当然,如果BACKUPDIR为空,这将(尝试)在文件系统根目录中创建子目录。但我假设您已BACKUPDIR在脚本的前面设置了某个值。)

答案2

做:

[ -d "$BACKUPDIR" ] || mkdir -p "$BACKUPDIR"/{directories,databases,logs}
  • [ -d "$BACKUPDIR" ]检查变量BACKUPDIR包含的目录是否存在

  • ||进行短路评估,将其视为逻辑或

  • 大括号扩展被shellfoo/{x,y,z}扩展为foo/x foo/y foo/z

相关内容