#1 Le 02/11/2006, à 11:23
- outworld
[RESOLU] Créer un dossier récursivement
Bonjour,
Je cherche à écrire un script qui me permettrai de créer un dossier dans plusieurs dossiers.
Je m'explique:
j'ai une liste de dossier: dossier1, dossier2, mondossier1, mondossier2, sondossier1, son dossier2.
Je voudrais créer le dossier, par exemple "site".
Mon idée était de lister le nombre de dossier, mettons 6 pour suivre l'exemple.
J'ai donc fait le script:
#!bin/bash
for ((i=0;i<6;i++)); do
mkdir */site
done
Je place le script au bon endroit, je me place au bon endroit.
J'ai une erreur me disant que le dossier * n'existe pas!
Je ne sais pas comment lui préciser qu'il faut prendre un dossier à la fois et créer le dossier dedans...
Une aide serait la bienvenue.
Merci beaucoup
Dernière modification par outworld (Le 04/11/2006, à 11:47)
Hors ligne
#2 Le 02/11/2006, à 11:57
- blutch
Re : [RESOLU] Créer un dossier récursivement
tente plutôt un
for i in `ls`
do
mkdir $i/site &>1 /dev/null
done
plutôt que d'utiliser ls tout simplement, tu peux ajouter l'option -d derrière en principe, mais bizarrement, le ls -d chez moi ne renvoie pas correctement ce qu'il devrait (lister juste les repertoires oO ) et c'est pourquoi j'ai renvoyé les messages d'erreur vers /dev/null derrière la commande mkdir (vu qu'il tentera de faire passer la commande pour un ficher également ce qui ne passera évidement pas... )
sinon, tu peux également passer tes noms de repertoires en arguments, ou encore les citer dans ta commande mais bon, ça c'est plutôt à toi de voir ^^
Si vous m'avez compris, c'est que je me suis mal exprimé :/
Hors ligne
#3 Le 02/11/2006, à 12:04
- snapshot
Re : [RESOLU] Créer un dossier récursivement
Salut,
Le fonctionnement de * en shell est un peu déroutant, mais finalement très logique.
En unix et contrairement à windows, les commandes (ici mkdir) ne connaissent rien à la signification de l'étoile (à part quelques rares exceptions, comme find). C'est le shell (bash) qui remplace l'étoile par la liste des fichiers correspondant au motif, et si aucun fichier ne correspond, le programme reçoit étoile en argument. Ainsi, quand tu fais ls *.bak, le shell (bash) va supprimer "*.bak" de la liste des arguments et mettre tous les fichiers correspondant à la place.
Ainsi, quand tu mets "*/site", le shell ne va trouver aucun répertoire contenant un fichier/dossier nommé site. Il va donc passer "*/site" directement à mkdir qui comprendra qu'il faut créer un répertoire site dans le répertoire "*" ...
Pour obtenir ce que tu veux faire (si j'ai bien compris), il faut utiliser une boucle for :
for dir in dossier1 dossier2 mondossier1 mondossier2 sondossier1 sondossier2
do
mkdir $dir/site
done
Si le répertorie courant ne contient que les dossiers cités, tu peux faire :
for dir in *
do
mkdir $dir/site
done
car l'étoile sera alors remplacée par la liste des dossiers...
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#4 Le 02/11/2006, à 12:09
- luc Milland
Re : [RESOLU] Créer un dossier récursivement
Salut,
je ne comprend pas bien ce que ton script est censé faire.
Tu fais une boucle qui donne successivement à i les valeurs 0,1,2,3,4 et 5, pour exécuter 6 fois la même commande.
Pour l'histoire de "*", c'est mkdir qui ne prend pas l'expansion de *, et c'est bien normal : il ne créé qu'un répertoire à la fois, ou un branche avec l'option -p (mkdir -p blah/bleh/bluh créera bluh et ses dossiers parent si nécessaire).
si tu veux créer une arborescence identique dans tous tes dossier d'un même répertoire :
MY_TREE=site/dossier1/dossier2
MY_SUBTREE=site/pics
for i in * ; do
if [ -d $i ]; then # on teste que $i est bien un répertoire
mdkir -p $i/$MY_TREE
mdkir $i/MY_SUBTREE
fi
done
Voilà, ça répond ?
http://www.praksys.org
Hors ligne
#5 Le 02/11/2006, à 12:12
- luc Milland
Re : [RESOLU] Créer un dossier récursivement
oups, snapshot a dégainé plus vite
Mais on dit à peu près la même chose, ouf
http://www.praksys.org
Hors ligne
#6 Le 02/11/2006, à 12:21
- outworld
Re : [RESOLU] Créer un dossier récursivement
Je commencais à me douter du fonctionnement de l'étoile...
Merci beaucoup pour votre aide à tous les deux, j'étais coincé et mes multiples recherches sur google ne m'ont pas aidé.
En tous cas mon problème est résolu merci snapshot pour les explications.
Euh merci à tous les trois je viens de voir ton post luc milland.
Hors ligne
#7 Le 02/11/2006, à 12:33
- blutch
Re : [RESOLU] Créer un dossier récursivement
ouaip menfin à coté de snapshot et luc milland, je passe carrément pour un bourrin
bon j'avoue c'était pas propre, mais fonctionnel
Si vous m'avez compris, c'est que je me suis mal exprimé :/
Hors ligne
#8 Le 02/11/2006, à 12:50
- luc Milland
Re : [RESOLU] Créer un dossier récursivement
le ls -d chez moi ne renvoie pas correctement ce qu'il devrait
c'est bien connu le "ls -d" modifie la perception.
Ok, je -> []
http://www.praksys.org
Hors ligne
#9 Le 02/11/2006, à 14:19
- Luc Hermitte
Re : [RESOLU] Créer un dossier récursivement
Sous bash (!)
mkdir -p rep/{,ssrep1,ssrep2/{,ssr2ssr1,ssr2ssr2,ssr2ssr3/ss}}
#10 Le 02/11/2006, à 14:24
- Luc Hermitte
Re : [RESOLU] Créer un dossier récursivement
Plus dans le cadre de ta question, tu peux grouper avec les accolades un peu partout
mkdir -p {rep1,rep2,rep3}/les/nouveaux/rep{1,2,3}