Pregunta ¿Cómo hacer mkdir solo si un directorio no existe?


Estoy escribiendo un script de shell para ejecutar bajo KornShell (ksh) en AIX. Me gustaría usar el mkdir comando para crear un directorio. Pero el directorio ya puede existir, en cuyo caso no quiero hacer nada. Así que quiero probar para ver si el directorio no existe o suprimir el error "Archivo existe" que mkdir lanza cuando intenta crear un directorio existente.

¿Alguna idea sobre la mejor manera de hacer esto?


1329
2018-04-27 14:47


origen


Respuestas:


Tratar mkdir -p:

mkdir -p foo

Tenga en cuenta que esto también creará cualquier directorio intermedio que no exista; por ejemplo,

mkdir -p foo/bar/baz

creará directorios foo, foo/bary foo/bar/baz si no existen

Si desea un error cuando los directorios principales no existen, y desea crear el directorio si no existe, entonces puede test para la existencia del directorio primero:

[ -d foo ] || mkdir foo

2307
2018-04-27 14:49



Esto debería funcionar:

$ mkdir -p dir

o:

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

que creará el directorio si no existe, pero le advertirá si el nombre del directorio que está intentando crear ya está siendo utilizado por algo que no sea un directorio.


109
2018-04-27 14:50



Use el indicador -p.

man mkdir
mkdir -p foo

70
2018-04-27 14:50



Definir árboles de directorios complejos con un comando

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

58
2017-08-21 20:08



Si no desea mostrar ningún mensaje de error:

[ -d newdir ] || mkdir newdir

Si quieres mostrar tu propio mensaje de error:

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

20
2018-03-27 03:57



El viejo probado y verdadero

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

hará lo que quiera con ninguna de las condiciones de carrera que tienen muchas de las otras soluciones.

Algunas veces, las soluciones más simples (y las más feas) son las mejores.


17
2018-01-20 12:23



mkdir foo funciona incluso si el directorio existe Para que funcione solo si el directorio llamado "foo" no existe, intente utilizar -p bandera.

Ejemplo: -

mkdir -p foo

Esto creará el directorio llamado "foo" solo si no existe. :)


10
2017-12-16 11:34



directory_name = "foo"

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

9
2018-04-27 14:51