Bashで任意のディレクトリに対してファイルの有無を確認するスクリプト

任意のディレクトリ配下の特定のファイルの有無を確認するシェルの例文はたくさんあるけれど、ディレクトリの中にファイル自体の有無を確認するスクリプトがあまり見当たらなかったので備忘録として記載。

スクリプトの内容

要件

任意のディレクトリhogeの、ファイルもしくはディレクトリの有無を確認する。ファイルの有無はlsで実施。

ファイルが存在した場合は「hoge ni file ha arimasen !」と出力する。

ファイルが存在しない場合は「hoge ni file ha arimasu !」と出力する。

ソースコード

#!/bin/bash

DIR=hoge

if [ -n "$(ls $DIR)" ]; then
    echo "$DIR ni file ha arimasu !"
else
    echo "$DIR ni file ha arimasen !"
fi

実行したら怒られた

実行結果:
ls: cannot access 'hoge': No such file or directory
hoge ni file ha arimasen !

アルゴリズム考え直さねば。

1.ディレクトリ:hogeの有無で分岐条件

2.ディレクトリ:hoge配下のファイル有無で分岐条件(元のアルゴリズム)

こんな感じかな

修正版

以下に修正して実行。

#!/bin/bash

DIR=hoge

if [ -d ${DIR} ]; then
    if [ -n "$(ls $DIR)" ]; then
        echo "$DIR ni file ha arimasu !"
    else
        echo "$DIR ni file ha arimasen !"
    fi
else echo "directory:$DIR ha arimasen !"
fi

ディレクトリが存在しない場合。

$ ls hoge
ls: cannot access 'hoge': No such file or directory
$ ./test02.sh
directory:hoge ha arimasen !

ディレクトリが存在してファイルが存在しない場合。

$ mkdir hoge
$ ./test02.sh
hoge ni file ha arimasen !

ディレクトリもファイルも存在する場合。

$ touch hoge/hoge.txt

$ ./test02.sh
hoge ni file ha arimasu !

参考

以下サイトを参照。情報開示いただきありがとうございます。

ディレクトリの中身の有無によって条件分岐をしたい - Qiita
ディレクトリが空ディレクトリかどうかによって条件分岐を行いたいということがよくあると思います。たとえば「対象のディレクトリがファイルやディレクトリを有しているとき、その中身をすべて削除する」という処理は次のように書くことができます。 ...

コメント

タイトルとURLをコピーしました