Ejecute Mkdir solo cuando el directorio no exista
-
el comando
mkdir
y su propósito -
Crear directorios con
mkdir
-
Crear directorios con
mkdir
solo cuando no existen -
Usar
mkdir
con una estructura de controlif
Este artículo habla sobre mkdir
y su uso en la creación de directorios. Además, analiza formas de usar mkdir
cuando el directorio que queremos crear no existe.
el comando mkdir
y su propósito
El comando mkdir
en Unix/bash significa directorio make. Permite a los usuarios crear carpetas, establecer permisos y mucho más.
El usuario que ejecuta el comando mkdir
debe tener suficientes privilegios para crear un directorio en la ruta especificada, o el usuario puede recibir un error de permiso denegado.
Crear directorios con mkdir
La sintaxis general para mkdir
es la siguiente:
mkdir <specified_option> directory_name
sudo mkdir <specified_option> directory_name # in case user doesn’t have permissions
mkdir
también permite la creación de múltiples directorios a la vez. Para hacerlo, agregue nombres de directorio separados por comas entre corchetes.
Asegúrese de no incluir espacios adicionales en los nombres de los directorios, o los directorios incluirán los espacios en sus nombres. El siguiente comando demuestra lo que dijimos:
mkdir {dir1,dir2,dir3} # here directory names are dir1, dir2 and dir3
Crear directorios con mkdir
solo cuando no existen
Un problema al usar mkdir
es un error cuando el directorio que uno está tratando de crear ya existe. No es un gran problema ejecutar el comando bash ya que mkdir
crea un directorio si no existe; de lo contrario, solo da un error apropiado.
Sin embargo, hay un giro. Suponga que está tratando de codificar un bash shell personalizado y no quiere que mkdir
dé un error al intentar recrear un archivo existente. ¿Qué harás despues?
Vamos a explicar varias formas de prevenir lo anterior.
[[ -d dir_name ]] || mkdir dir_name # option 1
mkdir -p dir_name # option 2
mkdir dir_name 2>/dev/null # option 3
La primera opción y la tercera opción son más recomendables que la segunda, ya que la segunda podría encontrarse en condiciones de carrera durante la ejecución concurrente. En cuanto al tercero, redirige la salida de stderror
a un archivo dev/null
.
Si ha estudiado sistemas operativos, existe el concepto de la tabla ppfdt
(tabla de descriptores de archivos de procesos). Recuerde que, de forma predeterminada, el descriptor cero apunta a stdin
, un descriptor apunta a stdout
y dos descriptores apuntan a stderror
.
/dev/null
es un archivo de dispositivo nulo, que descartará cualquier cosa escrita en él y devolverá un carácter de fin de archivo al leerlo. Es como una aspiradora, que aspira cualquier cosa que se le arroje.
Dicho esto, aquí puede redirigir stderror
a cualquier archivo no utilizado de su elección, pero se recomienda más /dev/null
.
Usar mkdir
con una estructura de control if
Otra forma de hacerlo podría girar en torno al uso de una estructura de control if
. Puede verificar si el directorio existe y, si no, luego proceder a crearlo; de lo contrario, no hagas nada.
El siguiente script lo explica con más detalle:
if [ ! -d dir_name ]; then mkdir dir_name; fi