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


191

一部のデータベースを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"

回答:


430

あなたは使用することができます-pされたパラメータ、として文書を

-p、-parents

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

そう:

mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"

30
@bmargulies-私が思ったよりもはるかに単純な聖なるがらくた= P
Topher Fangio

あなたは削除主義者なので、賛成です。おっと、約1年前にすでに実行されています!
アーロンホール

ユーザーが断続的なフォルダーの1つを読み取る権限がない場合は機能しません
TheKitMurkit

1
alias mkdirs=mkdir -p
ジェリー博士


14

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

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

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

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

この例は、SBTディレクトリ構造を作成するためにこのリンクから取得されました


9
{...,...}bashに何があるのか​​、なぜあなたの行動が意味をなすのかを説明したいと思うかもしれません。ブレース拡張の簡単な説明は、他のユーザーにとって有益です。「これを行うことができます」と「これ」を取得すると、想像力に少し残します。
David

@ DavidC.Rankinに同意します。この答えは完璧な私見ですが、ブラケット表記が実際に何をするかを説明する必要があります。
Delali、

0
mkdir -p newDir/subdir{1..8}
ls newDir/
subdir1 subdir2 subdir3 subdir4 subdir5 subdir6 subdir7 subdir8

これにより、8つのサブディレクトリが作成されnewDir/ます。
csabinho
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.