Crear directorios anidados

Crear directorios anidados

Quiero escribir un bashscript que obtenga un argumento de línea de comando y cree directorios anidados en el directorio de inicio del usuario. P.eja/b/c

mkdir -p $1/$2/$3

Pero no solo quiero crear tres niveles de directorios, quiero obtener el argumento 3 o 5 de la línea de comando y crear la cantidad necesaria de directorios anidados.

Respuesta1

#!/bin/sh

(
    IFS=/
    mkdir -p "$*"
)

La expansión de "$*"será una cadena entre comillas simples que constará de todos los argumentos del script concatenados junto con el primer carácter de $IFScomo delimitador. Es por eso que también $IFSconfiguramos /.

Lo estoy ejecutando en un subshell para evitar la configuración IFSdel resto del script (cambia el comportamiento de ciertas cosas, como cómo readfunciona). Si no hay nada más en el guión, puedes salir (y )salir.

Pruebas:

$ tree
.
`-- script.sh

0 directory, 1 file
$ ./script.sh 1 2 3 4 {a..k}
$ tree
.
|-- 1
|   `-- 2
|       `-- 3
|           `-- 4
|               `-- a
|                   `-- b
|                       `-- c
|                           `-- d
|                               `-- e
|                                   `-- f
|                                       `-- g
|                                           `-- h
|                                               `-- i
|                                                   `-- j
|                                                       `-- k
`-- script.sh

15 directories, 1 file

Respuesta2

Puede configurar el separador entre campos $IFSen /, luego "$*"se expandirá a a/b/c/...:

IFS=/
mkdir -p "$*"

información relacionada