Usare parentesi graffe (parentesi graffe) per creare la struttura di cartelle con `mkdir -p`


16

Come man mkdirafferma

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

Quando ho eseguito questo comando

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

Si crea una struttura di cartelle come questo workgenitore cartella, quindi F1, F2, F3sottocartelle e temp1e temp2cartelle bambino di età inferiore a tre cartella genitore F1, F2, F3.

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

Ora il problema è che voglio creare temp1, temp2cartelle solo sotto F1non sotto F2e F3, ma sto confuso su come posso scrivere un comando per fare quello che voglio.


@Caleb: scusa, non ero a conoscenza del fatto che entrambi stessimo lavorando allo stesso tempo, sembra che la fusione delle revisioni non sia implementata da SE: - /
Stéphane Gimenez

@Stephane: nessuna preoccupazione. Ho apportato molte modifiche ed è piuttosto raro che due modifiche principali vengano bloccate in quel modo. Grazie per aver contribuito!
Caleb,

Risposte:


25

Forse questo è quello che stai cercando?

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

Ehi, mi chiedevo di recente se le cose potessero essere fatte così semplicemente. Grazie!
rozcietrzewiacz,

2

Un'ottima descrizione dell'espansione del controvento (con esempi) è disponibile nella sottosezione Brace Expansiondel manuale di bash ( man bash, premere /per avviare la ricerca e la ricerca Brace Expansion).


Grazie, la tua risposta mi ha portato a questa grande guida! Avevo solo bisogno di sapere che si chiama "Brace Expansion", quindi sapevo cosa fare su Google. linuxcommand.org/lc3_lts0080.php Estratto: "Forse l'espansione più strana si chiama espansione di parentesi graffe. Con essa, è possibile creare più stringhe di testo da un modello contenente parentesi graffe. Ecco un esempio: [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}

Questo prima crea worke le tre sottodirectory prima di creare le directory di livello inferiore di work/F1. È facile da leggere e da capire.

Oppure, se hai assolutamente bisogno di combinare tutto in una singola espressione mostruosa (non è assolutamente necessario farlo poiché è difficile da leggere e mantenere):

mkdir -p work/F{1/temp{1,2},2,3}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.