Flux rss
Rechercher : dans
Par :

[Shell]Tester un chemin grace a 1 contenu

Trezeg, le mercredi 17 janvier 2007 à 11:44:34 
 Signaler ce message aux modérateurs

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:

CFI xml 999923 Relances
J'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/Relances
et 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
    done
Merci de votre aide
Configuration: SunOS 5.9

1

kilian, le mercredi 17 janvier 2007 à 16:56:33

Salut,

Ce n'est pas -x qu'il faut utiliser pour tester l'existence d'un rep mais -d

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

2

Trezeg, le mercredi 17 janvier 2007 à 17:13:12

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

Répondre à Trezeg

3

jipicy, le mercredi 17 janvier 2007 à 18:35:35

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)
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

4

kilian, le mercredi 17 janvier 2007 à 19:07:28

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 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
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

5

jipicy, le mercredi 17 janvier 2007 à 19:14:48

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]$
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

6

kilian, le mercredi 17 janvier 2007 à 21:21:02

Aaah, sympa l'astuce :-)

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

7

jipicy, le mercredi 17 janvier 2007 à 21:38:08

Note aussi qu'on peut "cumuler"...

mkdir -p data/rep3/{repA/{rep1,rep2,rep3},repB/{mon_rep1,mon_rep2},repC,repD}
;-))Ce qui donne :
ls -R
.:
data/  

./data:
rep3/

./data/rep3:
repA/  repB/  repC/  repD/

./data/rep3/repA:
rep1/  rep2/  rep3/

./data/rep3/repA/rep1:

./data/rep3/repA/rep2:

./data/rep3/repA/rep3:

./data/rep3/repB:
mon_rep1/  mon_rep2/

./data/rep3/repB/mon_rep1:

./data/rep3/repB/mon_rep2:

./data/rep3/repC:

./data/rep3/repD:
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

13

Trezeg, le jeudi 18 janvier 2007 à 10:50:50

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

Répondre à Trezeg

14

kilian, le jeudi 18 janvier 2007 à 14:30:34

Teste plutôt
bash test1
au lieu de
sh test1

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

8

lami20j, le mercredi 17 janvier 2007 à 21:55:31

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 pas
lami20j@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:


lami20j

Répondre à lami20j

9

jipicy, le mercredi 17 janvier 2007 à 22:05:35

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 ;-)) )
Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

10

lami20j, le mercredi 17 janvier 2007 à 22:16:32

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 :-))
lami20j

Répondre à lami20j

11

jipicy, le mercredi 17 janvier 2007 à 22:26:35

Pour le C je ne te dit pas :-))
Demande à "mamiemando" ;-))
Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

12

kilian, le mercredi 17 janvier 2007 à 23:47:05

Merci pour vos astuces à tous les deux (mkdir cumulatifs et astuce de lami20j).
Très instructif!! ;-)

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

15

 Trezeg, le jeudi 18 janvier 2007 à 14:47:27

Ca marche nikel aussi bien avec le bash qu'en tapant ./test1 !
Merci Kilian ;-)

Trez

Répondre à Trezeg
[Shell] Tester une variable numérique Tester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à... www.commentcamarche.net/faq/sujet-4605-shell-tester-une-variable-numerique
Shell - test: fichier ou répertoire ? (Résolu) Hello, Un petit problème. Je souhaiterias tester si un chemin+fichier est un fichier ou un répertoire. Effectivement le test -d permet de dire s'il s'agit d'un répertoire. Mais seulement un répertoire existant !! Je voudrais savoir s'il s'agit d'un... www.commentcamarche.net/forum/affich-2840007-shell-test-fichier-ou-repertoire
[shell]test la présence 1 mot dans un fichier Bonjour, Je cherche en shell a tester la présence d'un mot dans un fichier pour si cela est positif demarrer une commande et si cela est négatif en demarrer une autre. Et je suis un peu perdu. Je vous demande donc un peu d'aide ou eventuellement une... www.commentcamarche.net/forum/affich-4293242-shell-test-la-presence-1-mot-dans-un-fichier
Exécuter un script shellExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha-Bang Premièrement,... www.commentcamarche.net/faq/sujet-4627-executer-un-script-shell
Guide d'utilisation du Shell pour débutantSHELL BASH - GUIDE D'UTILISATION - Niveau Débutant Introduction Appel aux membres CCM II. C'est quoi le shell ? III. Comment accéder à la ligne de commande IV. Les consoles virtuelles Exemple : Accéder à la console 3 depuis l'interface... www.commentcamarche.net/faq/sujet-4801-guide-d-utilisation-du-shell-pour-debutant
[PHP] Lister le contenu d'un répertoireGrâce à PHP, il est possible d'afficher le contenu d'un répertoire et de ses sous-répertoires. Voici ci-dessous une fonction permettant de parcourir récursivement les répertoires et sous-répertoires et d'en afficher les fichiers : function... www.commentcamarche.net/faq/sujet-6773-php-lister-le-contenu-d-un-repertoire
Shell : tester si un repertoire est vide (Résolu)Bonjour, J'aimerai savoir s'il est possible de tester simplement si un repertoire est vide. J'essaie en récupérant la sortie de la commande ls mais ça ne marche pas comme je voudrai. ex : result=$(ls ./traitement) echo $result # si il y a au moins un... www.commentcamarche.net/forum/affich-9385452-shell-tester-si-un-repertoire-est-vide
[Shell] recopier le contenu d'un dossier. (Résolu)Bonjour, Je cherche un creer un shell qui copie le contenu d'un repertoire vers un autre. En prenant en compte les fichier cache "." Quelqun à une idée ... ou un lien? www.commentcamarche.net/forum/affich-3035536-shell-recopier-le-contenu-d-un-dossier
[Shell] test opérateur logique ORSalut a tous, je cherche la commande pour faire un OR logique dans : while test $grp -ne 1 OR 2 Voila le OR ou les || ne sont pas reconnus mais pour -o je ne sais pas ou le placer. Merci www.commentcamarche.net/forum/affich-2874868-shell-test-operateur-logique-or
Télécharger DSL TestDSLtest est constitué d'un logiciel à télécharger gratuitement et de serveurs de test. Ces équipements vous permettent d'effectuer des mesures du débit de votre ligne ADSL (en fonction de votre abonnement) mais également d'estimer l'utilisation des... www.commentcamarche.net/telecharger/telecharger-34055202-dsl-test
Télécharger SSH Secure ShellSSH secure shell for workstations est un client SSH flexible permettant de se connecter de façon sécurisée à des applications distantes. www.commentcamarche.net/telecharger/telecharger-71-ssh-secure-shell
Télécharger PC Security Test 2008PC Security Test est un logiciel gratuit qui fournit à l'utilisateur des outils, des informations et des conseils pour tester et améliorer la sécurité de son PC. Il est sensé contrôler qu'un PC est bien protégé en testant ll'efficacité de ses systèmes... www.commentcamarche.net/telecharger/telecharger-34057816-pc-security-test-2008
Linux - Le shellIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire le système... www.commentcamarche.net/contents/linux/linshell.php3
Tests et diagnostics du réseauTester la configuration IP Avant toute chose, il est recommandé de véfier la configuration IP de l'ordinateur. Les systèmes Windows proposent un outil en ligne de commande, appelé ipconfig permettant de connaître la configuration IP de... www.commentcamarche.net/contents/configuration-reseau/tests-diagnostics-reseau.php3
Systèmes UNIX - Le shellIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire entre le système... www.commentcamarche.net/contents/unix/unix-shell.php3