¿Cómo mkdir solo si aún no existe un directorio?

Resuelto Spike Williams asked hace 15 años • 17 respuestas

Estoy escribiendo un script de shell para ejecutarlo en KornShell (ksh) en AIX. Me gustaría usar el mkdircomando para crear un directorio. Pero es posible que el directorio ya exista, en cuyo caso no quiero hacer nada. Por lo tanto, quiero probar para ver que el directorio no existe o suprimir el error "El archivo existe" que mkdiraparece cuando intenta crear un directorio existente.

¿Cuál es la mejor manera de hacer esto?

Spike Williams avatar Apr 27 '09 21:04 Spike Williams
Aceptado

Intentar mkdir -p:

mkdir -p foo

Tenga en cuenta que esto también creará directorios intermedios que no existen; por ejemplo,

mkdir -p foo/bar/baz

creará directorios foo, foo/bary foo/bar/bazsi no existen.

Algunas implementaciones como GNU mkdirincluyen mkdir --parentsun alias más legible, pero esto no está especificado en POSIX/Especificación única de Unix y no está disponible en muchas plataformas comunes como macOS, varios BSD y varios Unix comerciales, por lo que debe evitarse.

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

[ -d foo ] || mkdir foo
Brian Campbell avatar Apr 27 '2009 14:04 Brian Campbell

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á en uso por algo que no sea un directorio.

Alnitak avatar Apr 27 '2009 14:04 Alnitak