よくあるシュチュエーションだと思いますが必要な判定処理・構文が端的にまとまっている記事が見つけられなかったので記載しておきます。
なお、背景として、ディレクトリが存在する場合/空でない場合にスクリプトで自動削除(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