shell - subdirectorios - unix cambiar de directorio
¿Cómo mkdir sólo si un directorio no existe ya? (13)
Estoy escribiendo un script de shell para ejecutar bajo KornShell (ksh) en AIX. Me gustaría usar el comando mkdir
para crear un directorio. Pero el directorio ya puede existir, en cuyo caso no quiero hacer nada. Así que quiero probar si el directorio no existe o suprimir el error "El archivo existe" que mkdir
lanza cuando intenta crear un directorio existente.
¿Alguna idea sobre la mejor manera de hacer esto?
Definiendo árboles de directorios complejos con un comando
mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
El viejo probado y verdadero
mkdir /tmp/qq >/dev/null 2>&1
hará lo que quiera sin ninguna de las condiciones de carrera que muchas de las otras soluciones tienen.
A veces las soluciones más simples (y las más feas) son las mejores.
Esta es una función simple (shell bash) que le permite crear un directorio si no existe.
#----------------------------------
# Create a directory if it doesn''t exist
#------------------------------------
createDirectory() {
if [ ! -d $1 ]
then
mkdir -p $1
fi
}
Puede llamar a la función anterior como:
createDirectory / tmp / fooDir / BarDir
Lo anterior crea fooDir y BarDir si no existen. Observe la opción "-p" en el comando mkdir que crea directorios recursivamente. Espero que esto ayude.
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 avisará si el nombre del directorio que está tratando de crear ya está en uso por algo distinto a un directorio.
O si quieres verificar la existencia primero:
if [[ ! -e /path/to/newdir ]]; then
mkdir /path/to/newdir
fi
-e es la prueba de existencia para shell korn.
También puede intentar googlear un manual de shell korn.
Prueba 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á los directorios foo
, foo/bar
, y foo/bar/baz
si no existen.
Si desea un error cuando no existen los directorios principales, y desea crear el directorio si no existe, puede test
primero la existencia del directorio:
[ -d foo ] || mkdir foo
Puede usar if loop para verificar si el directorio existe o no, si no existe, que crear el directorio.
1) dir = / home / dir_name
if [ ! -d $dir ]
then
mkdir $dir
else
echo "Directory exists"
fi
2) Puede usar el directorio mkdir con la opción -p para crear un directorio. Verificará si el directorio no está disponible.
mkdir -p $dir
mkdir -p también permite crear la estructura de árbol del directorio. Si desea crear los directorios padre e hijo con el mismo comando, puede optar por mkdir -p
mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
Si no quieres mostrar ningún mensaje de error:
[ -d newdir ] || mkdir newdir
Si desea mostrar su propio mensaje de error:
[ -d newdir ] && echo "Directory Exists" || mkdir newdir
Utilice la bandera -p.
man mkdir
mkdir -p foo
mkdir ya no admite el cambio -p en los sistemas Windows 8+.
Puedes usar esto:
IF NOT EXIST dir_name MKDIR dir_name
mkdir foo
funciona incluso si el directorio existe. Para que funcione solo si el directorio llamado "foo" no existe, intente usar la -p
.
Ejemplo: -
mkdir -p foo
Esto creará el directorio llamado "foo" solo si no existe. :)
directory_name = "foo"
if [ -d $directory_name ]
then
echo "Directory already exists"
else
mkdir $directory_name
fi
mkdir -p sam
- mkdir = Make Directory
- -p = - padres
- (no hay error si existe, hacer directorios padre según sea necesario)