Utiliser des accolades (accolades) pour créer une structure de dossiers avec `mkdir -p`

16

Comme les man mkdirÉtats

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

Quand j'ai exécuté cette commande

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

Il crée une structure de dossiers comme celui - ci workdossier parent puis F1, F2, F3dossiers enfants et temp1et des temp2dossiers d'enfants de moins de trois dossier parent F1, F2, F3.

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

Maintenant , le problème est que je veux créer temp1, temp2dossiers uniquement sous F1pas sous F2et F3, mais je suis confus sur la façon dont je peux écrire une commande pour faire ce que je veux.

mr_eclair
la source
@Caleb: désolé, je ne savais pas que nous éditions tous les deux en même temps, il semble que la fusion des révisions ne soit pas implémentée par SE: - /
Stéphane Gimenez
@Stephane: Pas de soucis. J'ai fait beaucoup de modifications et il est assez rare que deux modifications majeures soient claquées comme ça. Merci d'avoir contribué!
Caleb

Réponses:

25

C'est peut-être ce que vous cherchez?

 mkdir -p work/{F1/{temp1,temp2},F2,F3}
Stéphane Gimenez
la source
Hé, je me demandais récemment si les choses pouvaient être aussi simples que ça. Merci!
rozcietrzewiacz
2

Une très bonne description de l'expansion de l'accolade (avec des exemples) peut être trouvée dans la sous Brace Expansion- section du manuel bash ( man bash, appuyez sur /pour lancer la recherche et rechercher Brace Expansion).

rozcietrzewiacz
la source
Merci, votre réponse m'a conduit à ce grand guide! Je voulais juste savoir que ça s'appelait "Expansion Brace", donc je savais quoi sur Google. linuxcommand.org/lc3_lts0080.php Extrait: "L'expansion la plus étrange s'appelle peut-être l'expansion d'accolade. Avec elle, vous pouvez créer plusieurs chaînes de texte à partir d'un modèle contenant des accolades. Voici un exemple: [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}

Cela crée d'abord worket les trois sous-répertoires avant de créer les répertoires de niveau inférieur de work/F1. C'est facile à lire et à comprendre.

Ou, si vous devez absolument tout combiner en une seule expression de monstre (il n'y a absolument pas besoin de le faire car il est difficile à lire et à maintenir):

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