web-dev-qa-db-ja.com

Bashを使用して、存在しないサブディレクトリを再帰的に作成する方法は?

いくつかのデータベースをNice/neatディレクトリ構造にダンプするクイックバックアップスクリプトを作成していますが、作成する前にディレクトリが存在することを確認するためにテストする必要があることに気付きました。私が持っているコードは動作しますが、それを行うためのより良い方法があるようです。助言がありますか?

[ -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"
167
Topher Fangio

-pパラメーターを使用できます。これは、 ドキュメントに記載 です。

-p、-parents

既存の場合はエラーなし、必要に応じて親ディレクトリを作成

そう:

mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"
396
bmargulies
$ mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"
64

既存の答えは間違いなく目的を解決しますが、2つの異なるサブディレクトリの下にネストされたディレクトリ構造を複製したい場合は、これを行うことができます

mkdir -p {main,test}/{resources,scala/com/company}

呼び出されたディレクトリの下に次のディレクトリ構造を作成します

├── main
│   ├── resources
│   └── scala
│       └── com
│           └── company
└── test
    ├── resources
    └── scala
        └── com
            └── company

例は、SBTディレクトリ構造を作成するための this link から取られました

8
y2k-shubham