[Shell]Tester un chemin grace a 1 contenu
Résolu
Trezeg
Messages postés
81
Statut
Membre
-
Trezeg Messages postés 81 Statut Membre -
Trezeg Messages postés 81 Statut Membre -
Bonjour,
Je cherche a tester l'existence d'un repertoire au bout d'un chemin. Ce chemin est créé par un "cat" sur un fichier de parametres "param" dont le contenu est ceci:
Pour l'exemple, je voudrais aller au bout du repertoire:
Pour le moment j'ai crée ceci en vain:
Je cherche a tester l'existence d'un repertoire au bout d'un chemin. Ce chemin est créé par un "cat" sur un fichier de parametres "param" dont le contenu est ceci:
CFI xml 999923 RelancesJ'aimerais ensuite tester l'existence d'un repertoire "REP" (que je crée si il n'existe pas).
Pour l'exemple, je voudrais aller au bout du repertoire:
data/CFI/999923/Relanceset tester l'existence de "REP".
Pour le moment j'ai crée ceci en vain:
REP=ACreer
for i in `cat $param`
do
if [ ! -x $data/$1/$3/$4/${REP} ] ; then
mkdir ${REP}
fi
doneMerci de votre aideConfiguration: SunOS 5.9
7 réponses
-
Salut,
Ce n'est pas -x qu'il faut utiliser pour tester l'existence d'un rep mais -d -
Hello Kilian,
Je m'étais rendu compte de ma betise mais je ne pouvais plus éditer le post... Cela dit, meme avec le -d le probleme demeure le meme...
Trez -
Salut,
Essaie plutôt :while read line do set ${line} if [ ! -d "/data/$1/$3/$4" ] then echo -e "Création du répertoire $4" mkdir -p /data/$1/$3/$4 fi done < $(eval echo $param);-))
-
Pour accompagner jipicy, voici un autre exemple ou l'on prend les paramètres depuis un fichier.
Imagine, tu as un fichier dans le rep courant appelé CFI qui contient:CFI xml 999923 Relances CFI xml 999923 Relances2 CFI xml 999923 Relances3
Tu veux tester si data/colonne 1/colonne 3/colonne 4 existe.
Par exemple data/CFI/999923/Relances pour la première occurence.
S'ils n'existe pas, on les crée.
On pars du principe que data/CFI/999923/ existe déjà.
Ca nous donneparam=CFI #le fichier #le sed permet de remplacer les espaces par des points-virgule #sinon, les espaces sont pris comme séparateur comme les lignes #dans une boucle for for i in `cat $param | sed "s/ /;/g"` do #On cherche le nom du rep (avec colonne 1, colonne 3 etc....) #le point virgule est pris comme délimiteur de champs pour cut rep=data/$(echo $i | cut -d\; -f 1)/$(echo $i | cut -d\; -f 3)/$(echo $i | cut -d\; -f 4) #S'il n'existe pas: création du repertoire if [ ! -d $rep ] then mkdir $rep fi done
Note que pour créer un repertoire comme
a/b/c/d/e
Il faut déjà avoir créé a/b/c/d-
Salut kilian,
Joli exposé ;-))
Note que pour créer un repertoire comme
a/b/c/d/e
Il faut déjà avoir créé a/b/c/d
Ou utiliser le paramètre "-p" de la commande "mkdir" :[jp@MDK tmpfs]$ ls fich.txt [jp@MDK tmpfs]$ mkdir -p a/b/c/d/e [jp@MDK tmpfs]$ ls a/ fich.txt [jp@MDK tmpfs]$ ls -R .: a/ fich.txt ./a: b/ ./a/b: c/ ./a/b/c: d/ ./a/b/c/d: e/ ./a/b/c/d/e: [jp@MDK tmpfs]$
;-))
-
Hello,
J'ai testé la soluce de Kilian mais j'obtiens un message d'erreur.
Je récapitule mon cheminement:$ pwd /opt/app/progres/interfaces/bin/sql4out $ $ ls -l total 12 drwxr-xr-x 3 oper oper 512 Jan 18 09:57 CFI -rw-r--r-- 1 oper oper 29 Jan 18 10:04 par4out.par -rwxr-xr-x 1 oper oper 752 Jan 18 10:26 test1 $ cat par4out.par OCPA-CFI xml 999923 Relances $ more test1 WRK_DIR=PourTransmettre SQL4OUT_DIR=/opt/app/progres/interfaces/bin/sql4out DATA_DIR=/opt/app/progres/interfaces/bin/sql4out cd $DATA_DIR #le sed permet de remplacer les espaces par des points-virgule #sinon, les espaces sont pris comme séparateur comme les lignes #dans une boucle for for i in `cat ${SQL4OUT_DIR}/par4out.par | sed "s/ /;/g"` do #On cherche le nom du rep (avec colonne 1, colonne 3 etc....) #le point virgule est pris comme delimiteur de champs pour cut rep=$(echo $i | cut -d\; -f 1)/$(echo $i | cut -d\; -f 3)/$(echo $i | cut -d\; -f 4) #S'il n'existe pas: creation du repertoire if [ ! -d $rep/$WRK_DIR ] then mkdir -p $rep/$WRK_DIR fi done $ sh test1 test1: syntax error at line 13: `rep=$' unexpected
Je n'arrive pas à débugger le truc malgré quelques modifs :((
Trez -
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Salut,
et de ça, qu'en pensez-vous?
J'ai utilisé l'exemple de kilian, comme d'hab, je suis paresseux :-)CFI xml 999923 Relances CFI xml 999923 Relances2 CFI xml 999923 Relances3
Au début /home/lami20j/CFI n'existe paslami20j@debian:~$ ls -R CFI/ ls: CFI/: No such file or directory
je crée les répertoires en utilisant les données du fichier$ for i in $(sed 's/ /\//g' param);do if [ ! -d $(dirname $HOME/$i)/$(basename $HOME/$i) ];then mkdir -p $HOME/$i;fi;done
j'affiche le résultat$ ls -R CFI/ CFI/: xml CFI/xml: 999923 CFI/xml/999923: Relances Relances2 Relances3 CFI/xml/999923/Relances: CFI/xml/999923/Relances2: CFI/xml/999923/Relances3:
je crée le fichier a dans /home/lami20j/CFI/xml/999923/Relances
et le ficher bb dans /home/lami20j/CFI/xml/999923/Relances2
je supprime le répertoire /home/lami20j/CFI/xml/999923/Relances3$ touch CFI/xml/999923/Relances/a $ touch CFI/xml/999923/Relances2/bb $ rmdir CFI/xml/999923/Relances3
j'affiche$ ls -R CFI/ CFI/: xml CFI/xml: 999923 CFI/xml/999923: Relances Relances2 CFI/xml/999923/Relances: a CFI/xml/999923/Relances2: bb
je relance la commande qui lit le fichier paramètre$ for i in $(sed 's/ /\//g' param);do if [ ! -d $(dirname $HOME/$i)/$(basename $HOME/$i) ];then mkdir -p $HOME/$i;fi;done
j'affiche$ ls -R CFI/ CFI/: xml CFI/xml: 999923 CFI/xml/999923: Relances Relances2 Relances3 CFI/xml/999923/Relances: a CFI/xml/999923/Relances2: bb CFI/xml/999923/Relances3:
-
Salut,
et de ça, qu'en pensez-vous ?
Que tu devrais laisser tomber "PERL" ;-DDDDD
Sinon, c'est nickel (mais je préfère quand même mon mien de moi ;-)) )
- Re,
mais je préfère quand même mon mien de moi
c'est normal :-)
toutefois j'ai pensé àLe savoir n'est bon que s'il est partagé.
;-)
En ce qui concerne Perl, je ne laisse pas tomber(c'est mon préféré :-)) mais sache que j'ai commencé aussi le C, très sérieusement, et je me suis penché un peu sur sed et bash :-) (ici c'est ta fote :-))
Pour le C je ne te dit pas :-))
-
-
Merci pour vos astuces à tous les deux (mkdir cumulatifs et astuce de lami20j).
Très instructif!! ;-)
-
Ca marche nikel aussi bien avec le bash qu'en tapant ./test1 !
Merci Kilian ;-)
Trez