mkdir -p entrée awk

Je veux créer un argument d’entrée pour mkdir -p, j’ai une structure d’arborescence de répertoires sur un serveur et je veux copier cette même structure sur une autre machine en utilisant la commande mkdir -p. Les deux machines ne se “parlent” pas, pas de telnet, pas de ssh. L’objective est d’insérer une commande simple (mkdir -p master / {one / {a, b, c}, deux / {a, b, c}, trois / {a, b, c}}) dans un script d’installation dans server2, je ne veux pas de fichier supplémentaire et je ne peux pas accéder à server1 depuis server2.

Quelque chose comme master / {one / {a, b, c}, deux / {a, b, c}, trois / {a, b, c}}. J’utilise (find. -Type d) pour trouver les répertoires et maintenant j’ai besoin de la partie awk.

Quel est le meilleur moyen de créer une commande awk pour trouver la structure arborescente?

Directory tree: -- master ----one --------a --------b --------c ----two --------a --------b --------c ----three --------a --------b --------c Mkdir command: mkdir -p master/{one/{a,b,c},two/{a,b,c},three/{a,b,c}} 

Si vous voulez cp une structure de répertoire existante, vous pouvez envisager d’utiliser tar et untar. le goudron peut aussi fonctionner avec votre find .

Eh bien, par exemple, montrez simplement ce que je voulais dire.

sur votre serveur existantA:

 find .... -print |xargs tar -cf - |ssh user@SERVER_B "cd someDir; tar -xf - " 

actualisé

Si vous préférez copier un fichier sur serverB et le lancer, voici une autre solution sale:

sur serverA:

 kent$ mkdir a/b/{1..5}/c now we have a tree, then : kent$ find -type d|sed -r '/^.$/{s:.:#!/bin/bash:};{s/^\./mkdir -p &/}' #!/bin/bash mkdir -p ./a mkdir -p ./a/b mkdir -p ./a/b/4 mkdir -p ./a/b/4/c mkdir -p ./a/b/3 mkdir -p ./a/b/3/c mkdir -p ./a/b/1 mkdir -p ./a/b/1/c mkdir -p ./a/b/5 mkdir -p ./a/b/5/c mkdir -p ./a/b/2 mkdir -p ./a/b/2/c 

maintenant vous pouvez enregistrer la sortie dans un fichier script, sur B aller à l’ID cible, puis l’exécuter sur B

J’espère comprendre vos besoins: copiez l’arborescence des répertoires de server-a vers server-b,

Sur le serveur A:

 cd /path/to/dir find -type d | ssh server-B 'xargs -I% mkdir -p "/path/to/dir/%"' 

Cet oneliner find / sort / GNU sed fait un début:

 mkdir -p master/{one,two,three}/{a,b,c} find master -type d | sort | sed -r 'H;${x;s/\n//;y/\n/ /;:a;s/([^ ]*) (\1\/[^ ]* )/\2/;ta;:b;s#(([^ /]*/)+)([^ /]+) \1([^ /]+)#\1\3,\4#;tb;s#(([^ /]*/)*)([^ ]*)#\1{\3}#g;:c;s#(([^ /]*/)*)([^/ ]+)/(\{[^}]*\}) \1([^ /]+)/\4#\1\3,\5/\4#;tc;s#/([^/ ]*)/\{#/{\1}/{#g;s/^/mkdir -p /p};d' mkdir -p master/{one,three,two}/{a,b,c} 

C’est un peu long d’expliquer, mais essentiellement, cela rend la liste des répertoires sortingés dans une chaîne. Ensuite, utilise des boucles et des correspondances pour le condenser à l’expression. Enfin, il ajoute la commande mkdir -p . Il ne produit pas l’expression la plus efficace, mais cela pourrait être amélioré si un type différent était utilisé.