Вопрос: Как mkdir только в том случае, если dir еще не существует?


Я пишу сценарий оболочки для запуска под KornShell (ksh) в AIX. Я хотел бы использовать mkdirдля создания каталога. Но каталог уже может существовать, и в этом случае я не хочу ничего делать. Поэтому я хочу либо проверить, что каталог не существует, либо подавить ошибку «Файл существует», mkdirкогда он пытается создать существующий каталог.

Любые мысли о том, как лучше всего это сделать?


1289


источник


Ответы:


Пытаться mkdir -p:

mkdir -p foo

Обратите внимание, что это также создаст любые промежуточные каталоги, которые не существуют; например,

mkdir -p foo/bar/baz

создадут каталоги foo, foo/bar, а также foo/bar/bazесли они не существуют.

Если вы хотите получить ошибку, если родительские каталоги не существуют, и хотите создать каталог, если он не существует, вы можете testдля существования каталога сначала:

[ -d foo ] || mkdir foo

2241



Это должно работать:

$ 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

который создаст каталог, если он не существует, но предупредите, если имя создаваемого вами каталога уже используется чем-то другим, кроме каталога.


101



Используйте флаг -p.

man mkdir
mkdir -p foo

69



Defining complex directory trees with one command

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

55



If you don't want to show any error message:

[ -d newdir ] || mkdir newdir

If you want to show your own error message:

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

20



The old tried and true

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

will do what you want with none of the race conditions many of the other solutions have.

Sometimes the simplest (and ugliest) solutions are the best.


17



mkdir foo works even if the directory exists. To make it work only if the directory named "foo" does not exist, try using the -p flag.

Example :-

mkdir -p foo

This will create the directory named "foo" only if it does not exist. :)


10



directory_name = "foo"

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

9



Or if you want to check for existence first:

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

-e is the exist test for korn shell.

You can also try googling a korn shell manual.


7



mkdir does not support -p switch anymore on Windows 8+ systems.

You can use this:

IF NOT EXIST dir_name MKDIR dir_name

2



This is a simple function (bash shell) which lets you create a directory if it doesn't exist.

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

You can call the above function as :

createDirectory /tmp/fooDir/BarDir

The above creates fooDir and BarDir if they don't exist. Note the "-p" option in mkdir command which creates directories recursively. Hope this helps.


0



mkdir -p sam
  • mkdir = Make Directory
  • -p = --parents
  • (no error if existing, make parent directories as needed)

0