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存在しますが、サブディレクトリが欠落している状況は発生しません。

(もちろん空の場合は、ファイルシステムのルートにサブディレクトリを作成しようとしますが、スクリプトで以前にいくつかの値を設定したとします。BACKUPDIRBACKUPDIR

答え2

する:

[ -d "$BACKUPDIR" ] || mkdir -p "$BACKUPDIR"/{directories,databases,logs}
  • [ -d "$BACKUPDIR" ]BACKUPDIR変数に含まれるディレクトリが存在することを確認してください。

  • ||段落評価を実行し、それを論理ORとして扱います。

  • 中かっこ拡張はfoo/{x,y,z}シェルによって次に拡張されます。foo/x foo/y foo/z

関連情報