配列に格納されているすべてのディレクトリが存在することを確認するBashスクリプトを作成したいと思います。そうでない場合、スクリプトはそれを生成する必要があります。これは正しいアプローチですか?
array1=(
/apache
/apache/bin
/apache/conf
/apache/lib
/www
/www/html
/www/cgi-bin
/www/ftp
)
if [ ! -d “$array1” ]; then
mkdir $array1
else
break
fi
ベストアンサー1
ちょうど使用:
mkdir -p -- "${array1[@]}"
必要に応じて中間ディレクトリコンポーネントも作成されるため、リーフディレクトリのみを含むように配列を減らすこともできます。
array1=(
/apache/bin
/apache/conf
/apache/lib
/www/html
/www/cgi-bin
/www/ftp
)
次のように書くこともできます。
array1=(
/apache/{bin,conf,lib}
/www/{html,cgi-bin,ftp}
)
[[ -d ... ]] || mkdir ...
一般的に導入されるメソッドの種類TOCTOU競争条件可能であれば避けるのが最善です(たとえこの特別な場合は問題にはなりませんが)。