web-dev-qa-db-ja.com

ディレクトリがまだ存在しない場合にのみみmkdirするにはどうすればいいですか?

私は、AIX上でKornシェル(ksh)の下で実行するためのシェルスクリプトを書いています。ディレクトリを作成するにはmkdirコマンドを使用します。しかし、ディレクトリはすでに存在しているかもしれません。その場合私は何もしたくありません。そのため、そのディレクトリが存在しないことを確認するか、既存のディレクトリを作成しようとしたときにmkdirがスローする "File exists"エラーを抑制します。

これを行うための最良の方法について何か考えはありますか?

1594
Spike Williams

mkdir -p :を試してください。

mkdir -p foo

これによって、存在しない中間ディレクトリも作成されます。例えば、

mkdir -p foo/bar/baz

ディレクトリfoofoo/bar、およびfoo/bar/bazが存在しない場合は作成します。

GNU mkdirのような実装には、もっと読みやすい別名としてmkdir --parentsが含まれていますが、これはPOSIX /シングルUnix仕様では規定されていない避けるべきです。

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

[ -d foo ] || mkdir foo
2592
Brian Campbell

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

$ 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

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

133
Alnitak

-pフラグを使用してください。 

man mkdir
mkdir -p foo
76
jimmyorr

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

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

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

[ -d newdir ] || mkdir newdir

あなた自身のエラーメッセージを表示したい場合:

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

昔ながらの真実

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

他の解決策の多くが持っている競争条件のどれもなくあなたが望むことをするでしょう。

時には最も簡単な(そして最も醜い)解決策が最善です。

18
paxdiablo

mkdir fooは、ディレクトリが存在する場合でも機能します。 「foo」という名前のディレクトリが存在しない場合にのみ機能させるには、-pフラグを使用してみてください。

例:-

mkdir -p foo

これにより、「foo」という名前のディレクトリが存在しない場合にのみ作成されます。 :)

13
Atul Ranjan
directory_name = "foo"

if [ -d $directory_name ]
then
    echo "Directory already exists"
else
    mkdir $directory_name
fi
10

または、まず存在を確認したい場合は、

if [[ ! -e /path/to/newdir ]]; then
            mkdir /path/to/newdir
fi

-e はkornシェルの存在テストです。

ゴーンシェルマニュアルをグーグルで試すこともできます。

7
alkar

windows 8以降のシステムでは、mkdirは-pスイッチをサポートしなくなりました。

これを使うことができます:

IF NOT EXIST dir_name MKDIR dir_name
7
Karanvir Kang

Ifループを使用して、ディレクトリが存在するかどうかを確認することができます。存在しない場合は、ディレクトリを作成するよりも終了することはできません。

1)dir =/home/dir_name

if [ ! -d $dir ]
then
     mkdir $dir
else
     echo "Directory exists"  
fi

2)mkdirに-pオプションを付けてディレクトリを作成することができます。ディレクトリが利用できないかどうかをチェックします。 

mkdir -p $dir

mkdir -pでは、ディレクトリのツリー構造も作成できます。同じコマンドを使用して親ディレクトリと子ディレクトリを作成したい場合は、mkdir -pを選択できます。

mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
2
AbhinavVaidya8
mkdir -p sam
  • mkdir =ディレクトリを作る
  • -p = --parents
  • (存在する場合はエラーなし、必要に応じて親ディレクトリを作成します)
1
Paritosh Yadav

これは単純な関数(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"オプションに注意してください。お役に立てれば。

オプション-pについてはmanページman mkdirを参照

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

指定されたパスにすべてのディレクトリを作成し、existsがエラーをスローしなければ、指定されたパスの左から右にすべてのディレクトリを作成します。下記のコマンドを試してください。このコマンドを発行する前に、ディレクトリnewdiranotherdirが存在しません。

正しい使い方

mkdir -p /tmp/newdir/anotherdir

このコマンドを実行すると、/ tmpの下にnewdiranotherdirが作成されたことがわかります。このコマンドは何度でも発行できます。コマンドには常にexit(0)があります。このため、ほとんどの人は実際のパスを使用する前にシェルスクリプトでこのコマンドを使用します。

1
vkrams