Bashはディレクトリが存在することを確認します。配列を使用して作成されなかった場合

Bashはディレクトリが存在することを確認します。配列を使用して作成されなかった場合

配列に格納されているすべてのディレクトリが存在することを確認する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競争条件可能であれば避けるのが最善です(たとえこの特別な場合は問題にはなりませんが)。

おすすめ記事