Usando llaves (llaves) para crear la estructura de carpetas con `mkdir -p`

16

Como man mkdirestados

   -p, --parents
          no error if existing, make parent directories as needed

Cuando ejecuté este comando

mkdir -p work/{F1,F2,F3}/{temp1,temp2}

Se crea una estructura de carpetas como esta workcarpeta principal a continuación F1, F2, F3carpetas secundarias y temp1y temp2carpetas menor de carpeta de tres padres F1, F2, F3.

   work
     -F1
       -temp1
       -temp2
     -F2
       -temp1
       -temp2
     -F3
       -temp1
       -temp2

Ahora el problema es que quiero crear temp1, temp2carpetas sólo bajo F1no bajo F2y F3, pero estoy confundido sobre cómo puedo escribir un comando para hacer lo que quiera.

mr_eclair
fuente
@Caleb: lo siento, no sabía que ambos estábamos editando al mismo tiempo, parece que SE no implementa la fusión de revisiones: - /
Stéphane Gimenez
@Stephane: No te preocupes. He hecho muchas ediciones y es bastante raro que dos ediciones principales se vean así. ¡Gracias por contribuir!
Caleb

Respuestas:

25

Tal vez esto es lo que estás buscando?

 mkdir -p work/{F1/{temp1,temp2},F2,F3}
Stéphane Gimenez
fuente
Oye, me preguntaba recientemente si las cosas podrían hacerse tan simple como eso. ¡Gracias!
rozcietrzewiacz
2

Se puede encontrar una muy buena descripción de la expansión de llaves (con ejemplos) en la subsección Brace Expansiondel manual de bash ( man bashpresione /para iniciar la búsqueda y buscar Brace Expansion).

rozcietrzewiacz
fuente
¡Gracias, su respuesta me llevó a esta gran guía! Solo necesitaba saber que se llama "Expansión de Brace", así que sabía qué buscar en Google. linuxcommand.org/lc3_lts0080.php Extracto: "Quizás la expansión más extraña se llama expansión de llaves. Con ella, puede crear múltiples cadenas de texto a partir de un patrón que contiene llaves. Aquí hay un ejemplo: [me@linuxbox me]$ echo Front-{A,B,C}-Back Front-A-Back Front-B-Back Front-C-Back"
Rock Lee
0
mkdir -p work/F{1..3} work/F1/temp{1,2}

Esto crea primero worklos tres subdirectorios antes de crear los directorios de nivel inferior de work/F1. Es fácil de leer y entender.

O, si es absolutamente necesario combinar todo en una sola expresión de monstruo (no hay absolutamente ninguna necesidad de hacerlo, ya que es difícil de leer y mantener):

mkdir -p work/F{1/temp{1,2},2,3}
Kusalananda
fuente