スクリプトがファイルを生成してはいけませんが、ファイルを生成しようとしていますか?

スクリプトがファイルを生成してはいけませんが、ファイルを生成しようとしていますか?

頻繁に移動するいくつかのフォルダを含むフォルダがあるため、そのフォルダが存在するかどうかを確認し、存在しない場合は生成するスクリプトを作成しました。これが私がしたことです。 (私の考えでは)達成できるようです。

if [ ! -f "$DIR/0folder" ]
then
mkdir "$DIR/0folder"
fi

しかし、0folderすでにそこにいるのに、まだmkdir私に言おうとしています。ここのように。

mkdir: /Allfoldersgoeshere/subfolder/0folder: File exists

なぜ?すでに存在しているので無視する必要がありますか?

ベストアンサー1

テストで-f次のことを確認しています。FILE存在し、通常のファイルです。。あなたが必要とするのは、-d次のことをテストすることです。FILE存在し、ディレクトリです

if [ ! -d "$DIR/0folder" ]
then
mkdir "$DIR/0folder"
fi

ただし、ディレクトリが存在することを確認する必要はありません。マニュアルページによると、mkdir次のことがわかります。

man mkdir | grep -A1 -- -p

   -p, --parents
          no error if existing, make parent directories as needed

しかし、FILE存在し、通常のファイルです。 mkdir -p失敗するだろう

mkdir: /Allfoldersgoeshere/subfolder/0folder': Not a directory.  

この場合、fileディレクトリを作成する前に予想されるaを処理する必要があります。directory

おすすめ記事