我正在创建一个快速备份脚本,它将一些数据库转储到一个漂亮/整洁的目录结构中,我意识到我需要在创建目录之前进行测试以确保目录存在。我的代码有效,但有更好的方法吗?
[ -d "$BACKUP_DIR" ] || mkdir "$BACKUP_DIR"
[ -d "$BACKUP_DIR/$client" ] || mkdir "$BACKUP_DIR/$client"
[ -d "$BACKUP_DIR/$client/$year" ] || mkdir "$BACKUP_DIR/$client/$year"
[ -d "$BACKUP_DIR/$client/$year/$month" ] || mkdir "$BACKUP_DIR/$client/$year/$month"
[ -d "$BACKUP_DIR/$client/$year/$month/$day" ] || mkdir "$BACKUP_DIR/$client/$year/$month/$day"
您可以使用 -p
参数,即 documented as:
-p, --parents 如果存在则没有错误,根据需要创建父目录
所以:
mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"
mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"
虽然现有答案肯定可以解决问题,但如果您希望在两个不同的子目录下复制嵌套目录结构,那么您可以这样做:
mkdir -p {main,test}/{resources,scala/com/company}
它将在调用它的目录下创建以下目录结构:
├── main
│ ├── resources
│ └── scala
│ └── com
│ └── company
└── test
├── resources
└── scala
└── com
└── company
该示例取自 this link,用于创建 SBT 目录结构。
{...,...}
是什么,以及为什么您的操作有意义。 大括号扩展 的简短解释将对其他用户有益。一个“你可以做到”并得到“这个”的想法有点让人想像。
mkdir -p newDir/subdir{1..8}
ls newDir/
subdir1 subdir2 subdir3 subdir4 subdir5 subdir6 subdir7 subdir8
newDir/
中创建 8 个子目录。
不定期副业成功案例分享
alias mkdirs=mkdir -p