10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-07-02

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

なお、背景として、ディレクトリが存在する場合/空でない場合にスクリプトで自動削除(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
10
5
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?