Supposons que j'ai une structure de répertoire comme celle-ci:
$ [~ / practice] ls a B c d/
Maintenant, je veux créer un répertoire tmp1
dans tous les sous-répertoires de practice
et je fais ceci:
$ [~ / practice] mkdir * / tmp1 mkdir: impossible de créer le répertoire `* / tmp1 ': aucun fichier ou répertoire de ce type
Puis j'essaie le -p
commutateur et je finis avec un répertoire nommé *
avec un sous-répertoiretmp1
$ [~ / practice] mkdir -p * / tmp1 $ [~ / practice] ls */ a B c d/
Je sais que l'utilisation de -p
switch est de créer plusieurs répertoires inexistants. J'ai juste pensé que cela pourrait aider.
Comment créer tmp1
simultanément dans tous les sous-répertoires?
Si cela peut être fait, comment puis-je l' étends à créer \tmp1
, \tmp2
, \tmp3
dans \a
, \b
et \c
à la fois?
Edit: J'ai manqué de mentionner que les répertoires ne doivent pas être simples et dans l' ordre, comme a
, b
, c
etc., et le répertoire à créer est pas nécessairement comme tmp1
, tmp2
.
$ [~ / practice] ls chien / chat / rat /
En eux, je voudrais avoir quelque chose comme
$ [~ / pratique] ls * chien: rouge Bleu/ chat: rouge Bleu/ rat: rouge Bleu/
Réponses:
Avec globs :
REMARQUE
*/
comme globSi vous souhaitez créer plusieurs sous-répertoires à la fois:
for dir in */; do mkdir -- "$dir"/{tmp1,foo,bar,qux}; done
la source
for i in */; do mkdir "$i/itemone" "$i/itemtwo"; done
pour plusieurs noms de répertoires non-en ordre?la source
Avec GNU ou BSD *, trouvez:
ou en utilisant l'expansion de paramètre:
* Comprend OS X
la source
find . -name . -o -prune -type d -exec sh -c 'exec mkdir "$1/newdir"' sh {} \;
Hors sujet puisque vous mentionnez
bash
, mais pour l'enregistrement, avec zsh, vous feriez:$^var
active l’ expansion de type accolade pour l’extension du tableau. Cela rappellerc
l'^
opérateur de et dansrc
(ou son dérivées
), vous l'écriviez:Cependant, notez (et il en va de même pour les solutions bash données ici) que, dans la solution rc,
dirs
contiendrait également des liens symboliques vers des répertoires. Dans la solution zsh, remplacez*(/)
par*(-/)
si vous souhaitez inclure des liens symboliques vers des répertoires.la source
-p
indicateur.Portable, passez en boucle sur les répertoires parents:
Ajoutez
--
aprèsmkdir
si vous pouvez avoir des répertoires dont le nom commence par-
.En zsh, vous pouvez le faire en une seule commande avec le
e
qualificatif glob :mais il est plus rapide de taper ceci comme deux commandes:
la source
mkdir -- whatever
et omettez--
si vous avez l'intention d'élargir ce qui pourrait éventuellement être pris comme options de lamkdir
commande.". Il ne sert à rien d'omettre--
ici. Ce n'est peut-être pas un problème dans le cas du PO, mais c'est un problème dans le cas général. Je pense que nous avons le devoir d'enseigner la syntaxe correcte et sûre ici.--
ainsi que des citations et des gros avertissements lorsque les nouvelles lignes ne sont pas prises en charge. Dans un contexte de ligne de commande, je préfère montrer la version rapide qui fonctionne dans la pratique d’abord, et la version pare-balles en complément.Vous pouvez faire ça comme ça:
la source
Variation sur la réponse de sputnick qui évite les fichiers autres que des répertoires:
la source
if [ -d "$x" ];…
?C’est un bon exemple de l’ancien maître Unix (testé sur FreeBSD 10.1) si vous voulez contrôler la version (avec l’archivage RCS verrouillé: ci -l avec un bref commentaire comme ir: pour la version initiale) vos fichiers de configuration / etc / * sur ~ / .his / etc
la source
Devrait être \! nom "RCS" et cela fonctionne mieux lors de la première vérification.
sudo trouve ~ / .his / etc \! -name "RCS" -ls
sudo trouve -d ~ / .his / etc \! -name "RCS" | xargs sudo ci -l -mir -t-ir
Ce dernier fonctionne également très bien pour le filtre en partie filtrant tout le contenu RCS sur le nom du fichier:
sudo trouve -d ~ / .his / etc -type f | grep -v RCS | xargs sudo ci -l -mir -t-ir
la source
c'est une aide précieuse pour moi. J'avais besoin de créer un ensemble de sous-répertoires dans plusieurs dossiers et quelque chose comme:
a bien fonctionné sauf lorsqu'un espace blanc est rencontré. Est-il possible d'ignorer les espaces dans la
*/*/
partie des arguments?la source