Help us understand the problem. What is going on with this article?

[bash]ディレクトリが存在しない場合は作成。存在かつ空でない場合は警告を出力して終了する構文

よくあるシュチュエーションだと思いますが必要な判定処理・構文が端的にまとまっている記事が見つけられなかったので記載しておきます。

なお、背景として、ディレクトリが存在する場合/空でない場合にスクリプトで自動削除(rm -rf <ディレクトリ>)してしまうのはパスを間違えた場合に大事故につながるので避けたいという背景があります。(したがって手動操作が許容されるスクリプトでのみ有効)

#!bin/bash

DSTDIR=/path/to/dir

if [ ! -d $DSTDIR ]; then
  # 存在しない場合は作成(本処理へ)
  mkdir $DSTDIR
else
  # 存在して空でない場合は警告を出して終了
  if [ -n "$(ls -A $DSTDIR)" ]; then
    echo "出力先にファイルが存在します。削除してください。=> $DSTDIR"
    exit 1
  fi
fi

本処理

lsの-Aオプションについて

先頭がコロンで始まるファイル・ディレクトリも表示対象となります。
例として、testディレクトリ下に.dummy_file.dummy_dirを追加して試してみます。

$ ls test
⇒ 空
$ ls -A test
.dummy_dir  .dummy_file
$ ls -a test
.  ..  .dummy_dir  .dummy_file
s-katsumata
東京在住の二児の父。絶賛育児中。業界歴21年、フリーランス歴13年。在宅でシステム開発(受託、自社パッケージ)に従事。生涯コード書いていたいアラフィフプログラマ。悩みは老眼。ミッションはスクラッチ開発した宿泊・アクティビティ予約システム「みなたび」で地域で頑張る人を支援
https://nyango.com/services/travel
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away