Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams I can't find the source on the fly, but for Makefiles mkdir -p is discouraged b/c there may be race conditions in concurrent execution. So, depending on what your script does and in which environment it lives the first option given is this answer should be preferred. Also, you could just mkdir product 2>/dev/null and not care. user1129682 Sep 4, 2013 at 20:47 @user1129682: The first option also has a potential race condition; the directory could be created by some other process between the -d test and the mkdir . I suspect mkdir -p makes this time window for this race condition slightly shorter. Keith Thompson Sep 4, 2013 at 21:29 Beside the race condition in the innecessary testing, there is also the possibility that dir does exist but is not a directory , but a file or a device entry or a unix-domain socket or a named pipe, or whatever ... wildplasser Sep 4, 2013 at 22:10 @wildplasser Yes and that would already be in the coder's option how he/she would handle the situation. One could send a message to the user and ask for input, abort, or do other things if [[ -e dir && ! -d dir ]] is valid. konsolebox Sep 4, 2013 at 22:17

Use mkdir's -p option, but note that it has another effect as well.

 -p      Create intermediate directories as required.  If this option is not specified, the full path prefix of each oper-
         and must already exist.  On the other hand, with this option specified, no error will be reported if a directory
         given as an operand already exists.  Intermediate directories are created with permission bits of rwxrwxrwx
         (0777) as modified by the current umask, plus write and search permission for the owner.

NOTE:- This will also create any intermediate directories that don't exist; for instance,

Check out mkdir -p

or try this:-

if [[ ! -e $dir ]]; then
    mkdir $dir
elif [[ ! -d $dir ]]; then
    echo "$Message" 1>&2