shell - 許可がありません - シェルスクリプト




dirが存在しない場合にのみmkdirを実行する方法は? (9)

-pフラグを使用します。

man mkdir
mkdir -p foo

私は、AIX上のKornShell(ksh)の下で動作するシェルスクリプトを書いています。 mkdirコマンドを使ってディレクトリを作成したいと思います。 しかし、ディレクトリがすでに存在する可能性があります。その場合、私は何もしたくありません。 ですから、ディレクトリが存在しないかどうかをテストするか、既存のディレクトリを作成しようとするとmkdirスローする "ファイルが存在する"というエラーを抑制します。

どのようにこれを行うに最善の考え?


1つのコマンドで複雑なディレクトリツリーを定義する

mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

mkdirはWindows 8以降のシステムでは-pスイッチをサポートしていません。

あなたはこれを使うことができます:

IF NOT EXIST dir_name MKDIR dir_name

mkdir -p試してください:

mkdir -p foo

これは、存在しない中間ディレクトリも作成することに注意してください。 例えば、

mkdir -p foo/bar/baz

ディレクトリfoofoo/barfoo/bar/bazが存在しない場合は作成されます。

親ディレクトリが存在しない場合にエラーが発生し、存在しない場合はディレクトリを作成したい場合は、最初にディレクトリの存在をtestできます。

[ -d foo ] || mkdir foo

これはうまくいくはずです:

$ mkdir -p dir

または:

if [[ ! -e $dir ]]; then
    mkdir $dir
elif [[ ! -d $dir ]]; then
    echo "$dir already exists but is not a directory" 1>&2
fi

ディレクトリが存在しない場合は作成されますが、作成しようとしているディレクトリの名前がディレクトリ以外のものによって既に使用されている場合は警告が表示されます。


これは単純な関数(bashシェル)で、存在しない場合はディレクトリを作成することができます。

#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
    if [ ! -d $1 ]
        then
        mkdir -p $1
    fi
}

あなたは上記の関数を以下のように呼び出すことができます:

createDirectory / tmp / fooDir / BarDir

上記のようにfooDirとBarDirが存在しない場合は作成されます。 ディレクトリを再帰的に作成するmkdirコマンドの "-p"オプションに注意してください。 お役に立てれば。


エラーメッセージを表示したくない場合:

[ -d newdir ] || mkdir newdir

独自のエラーメッセージを表示する場合は、次のようにします。

[ -d newdir ] && echo "Directory Exists" || mkdir newdir

古い試みと真実

mkdir /tmp/qq >/dev/null 2>&1

他のソリューションの多くが持っている競争条件のどれもあなたが望むことをしません。

場合によっては、最も単純な(そして醜い)ソリューションが最適な場合もあります。


mkdir -p sam
  • mkdir =ディレクトリの作成
  • -p = --parents
  • (存在する場合はエラーなし、必要に応じて親ディレクトリを作成する)




mkdir