ディレクトリが空ディレクトリかどうかによって条件分岐を行いたいということがよくあると思います。たとえば「対象のディレクトリがファイルやディレクトリを有しているとき、その中身をすべて削除する」という処理は次のように書くことができます。
directory=/hoge/hoge
if [ -n "$(ls $directory)" ]; then
rm -r $directory
fi
-n
は引数が空文字以外ならtrueを、それ以外ならfalseを返します。対象のディレクトリが空のときls
は何も返さず、したがってそれを文字列化した"$(ls $directory)"
が空文字となるため、[ -z $(ls $directory) ]
がtrueとなりif
の本体が実行されるというわけです。
ちなみに-z
は-n
の逆、つまり引数が空文字ならtrueを、それ以外ならfalseを返します。次の例ではディレクトリが空かどうかをみて、空ならばそのディレクトリ直下にcsvファイルを配置するという処理を行っています。
directory =/foo/foo
if [ -z "$(ls $directory)" ]; then
touch directory/foo.csv
fi