[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 aide
A voir également:
- [Shell]Tester un chemin grace a 1 contenu
- Flash drive tester - Télécharger - Divers Utilitaires
- Classic shell - Télécharger - Personnalisation
- Tester son pc - Guide
- Le fichier à télécharger correspond au contenu brut d’un courrier électronique. de quel pays a été envoyé ce message ? - Guide
- Word a trouvé du contenu illisible - Guide
7 réponses
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
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 :
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:
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 donne
Note que pour créer un repertoire comme
a/b/c/d/e
Il faut déjà avoir créé a/b/c/d
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 donne
param=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" :
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:
Je n'arrive pas à débugger le truc malgré quelques modifs :((
Trez
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 :-)
Au début /home/lami20j/CFI n'existe pas
j'affiche le résultat
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
j'affiche
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 pas
lami20j@debian:~$ ls -R CFI/ ls: CFI/: No such file or directoryje 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/Relances3j'affiche
$ ls -R CFI/ CFI/: xml CFI/xml: 999923 CFI/xml/999923: Relances Relances2 CFI/xml/999923/Relances: a CFI/xml/999923/Relances2: bbje 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:
Re,
mais je préfère quand même mon mien de moi
c'est normal :-)
toutefois j'ai pensé à
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 :-))
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 :-))