¿Cómo mkdir solo si aún no existe un directorio?
Estoy escribiendo un script de shell para ejecutarlo en KornShell (ksh) en AIX. Me gustaría usar el mkdir
comando 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 mkdir
aparece cuando intenta crear un directorio existente.
¿Cuál es la mejor manera de hacer esto?
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/bar
y foo/bar/baz
si no existen.
Algunas implementaciones como GNU mkdir
incluyen mkdir --parents
un 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 test
por la existencia del directorio:
[ -d foo ] || mkdir foo
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.