IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Exclure des éléments dans un traitement de fichiers


Sujet :

Linux

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Points : 65
    Points
    65
    Par défaut
    Aah ok j'avais pas compris pour le traitement !

    Du coup j'ai essayé de mettre mon traitement à la place, mais ça ne marche pas… Je pense que ça ne peut pas fonctionner, pour cette raison (pas facile d'expliquer avec des mots ) :

    Le code tel qu'il est maintenant (qui fonctionne ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    tabdossier="$*"
    for d in "$tabdossier"
    do
            explorer=`find $tabdossier -type f -regextype posix-extended ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" -exec sh -c 'echo "$1"' {} {} \;`
            if [[ $explorer = "" ]]
    	then
    		echo "<br /><font color=\"2E9AFE\" size=4><b>Le dossier $tmp ne possède pas de fichiers. </b></font><br />"
    	else
    		echo "<br /><font color=\"2E9AFE\" size=4><b>Dossier $tmp en cours de traitement ... </b></font><br />"
    	fi
    	
            # ICI je fais le traitement sur chaque fichier récupéré dans $explorer 
    	for i in $explorer
    	do
                    // traitement
            done
    done

    Le code en essayant de mettre le traitement dans $explorer (qui ne marche pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tabdossier="$*"
    for d in "$tabdossier"
    do
            explorer=`find $tabdossier -type f -regextype posix-extended ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" -exec sh -c 'echo "traitement $1"' {} {} \;`
    
    # ALORS QUE ici je ne peux ni mettre ma boucle "for i in $tabexplorer" et le traitement, ni le traitement direct, ça ne marche pas…
    
    done
    ::EDIT::
    J'ai remplacé $1 par $* :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    explorer=`find $tabdossier -type f -regextype posix-extended ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" -exec sh -c 'echo "$*"' {} {} \;`

  2. #22
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    il n'y a que cette commande find à prendre en compte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$tabdossier" -type f -regextype posix-extended ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" -exec sh -c 'echo "traitement $1"' {} {} \;
    mais au lieu d'écrire echo "traitement $1", tu écris les commandes à appliquer aux fichiers, qui "apparaîtront" à la place de $1.
    Donc, pour chaque fichier que retournerait find, sh -c 'commande' sera exécuté.

  3. #23
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Points : 65
    Points
    65
    Par défaut
    Ok je comprends ton raisonnement. J'ai réussi à afficher chaque fichier trouvé c'est déjà pas mal, après le traitement ne s'effectue pas correctement, je vais essayer de trouver pourquoi… Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    #!/bin/sh
     
    tabdossier="$*"
     
    for d in "$tabdossier"
    do
    	tmp="${tabdossier%/*}"
    	tmp="${tmp##*/}"
     
    	# mon traitement sur chaque fichier :
    	commande=`awk 'BEGIN {  }
    				/^\#/ {nb6++}
    				/^\/\// || /\/\// {nb7++}
    	      		/^\/\*/, /\*\/$/ {nb8++}
    	      		/\/\*/, /\*\// {nb8bis++}
    	      		/^<!--/, /-->$/ {nb9++}
    	      		/<!--/, /-->/ {nb9bis++}
    	      		/^[ \t]*$/ {nb++}
    				END { if ( (nb6+nb7+nb8+nb8bis+nb9+nb9bis) < ((NR-nb)*(20/100)) ) {
    						print "Nombre total de lignes (non vides) : " (NR-nb) "<br />";
                                                   # autres traitements…
    					}
    				}
    			' `
     
    	explorer=`find $tabdossier -type f -regextype posix-extended ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" -exec sh -c 'echo "$commande $1 <br />"' {} {} \;`
    	echo $explorer
    done
    exit 0;

  4. #24
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    après le traitement ne s'effectue pas correctement, je vais essayer de trouver pourquoi
    Peut être en donnant quelque chose à traiter à la commande "awk" ?

  5. #25
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Points : 65
    Points
    65
    Par défaut
    Oui, je dois donner le fichier à traiter à awk, mais seulement voilà, si je l'écris comme ci-dessous ça ne fonctionne pas puisque $1 n'est pas encore défini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    commande=`awk 'BEGIN {  }
    				/^\#/ {nb6++}
    				/^\/\// || /\/\// {nb7++}
    	      		/^\/\*/, /\*\/$/ {nb8++}
    	      		/\/\*/, /\*\// {nb8bis++}
    	      		/^<!--/, /-->$/ {nb9++}
    	      		/<!--/, /-->/ {nb9bis++}
    	      		/^[ \t]*$/ {nb++}
    				END { if ( (nb6+nb7+nb8+nb8bis+nb9+nb9bis) < ((NR-nb)*(20/100)) ) {
    					print "Nombre total de lignes (non vides) : " (NR-nb) "<br />";
    					}
    				}
    			' $1`
     
    explorer=`find $tabdossier -type f -regextype posix-extended ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" -exec sh -c 'echo "$commande <br />"' {} {} \;`
     
    	if [[ $explorer = "" ]]
    	then
    		echo "<br /><font color=\"2E9AFE\" size=4><b>Le dossier $tmp ne possède pas de fichiers. </b></font><br />"
    	else
    		echo "<br /><font color=\"2E9AFE\" size=4><b>Dossier $tmp en cours de traitement ... </b></font><br />"
    		echo $explorer
    	fi
    ( PS :
    $ man woman
    Il n'y a pas de page de manuel pour woman.
    --> J'adore xD )

  6. #26
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par ginger4957 Voir le message
    Oui, je dois donner le fichier à traiter à awk, mais seulement voilà, si je l'écris comme ci-dessous ça ne fonctionne pas puisque $1 n'est pas encore défini :
    La logique voudrait que ce soit "$d" et non pas "$1"

    Depuis le départ j'ai l'impression que tu t'emmêles grave les pinceaux avec ton script

    Pourrais-tu essayer de nous décrire les finalités de ton script, puis de commenter les différentes commandes que tu emploies ?

  7. #27
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    utilise une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #!/bin/bash
    
    commandeAwk() {
       awk 'BEGIN {  }
    				/^\#/ {nb6++}
    				/^\/\// || /\/\// {nb7++}
    	      		/^\/\*/, /\*\/$/ {nb8++}
    	      		/\/\*/, /\*\// {nb8bis++}
    	      		/^<!--/, /-->$/ {nb9++}
    	      		/<!--/, /-->/ {nb9bis++}
    	      		/^[ \t]*$/ {nb++}
    				END { if ( (nb6+nb7+nb8+nb8bis+nb9+nb9bis) < ((NR-nb)*(20/100)) ) {
    					print "Nombre total de lignes (non vides) : " (NR-nb) "<br />";
    					}
    				}' $1
    }
    export -f commandeAwk
    find "$tabdossier" -type f \
                       -regextype posix-extended \
                       ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" \
                       -exec bash -c 'commandeAwk $1' {} {} \;
    ...
    ?

  8. #28
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Points : 65
    Points
    65
    Par défaut
    J'ai essayé ta fonction, elle fonctionne très bien, merci
    Mais pas si le dossier $tabdossier possède des espaces dans son nom…
    Du coup ça fait la même chose qu'avant, mais en mieux (il y a moins de lignes de code )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    # j'ai essayé plusieurs idées :
    find $tabdossier -type f -regextype posix-extended ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" -exec sh -c 'commandeAwk $1; echo "<br />"' {} {} \;
     
    find $tabdossier -type f -regextype posix-extended ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" -exec sh -c 'commandeAwk $*; echo "<br />"' {} {} \;
     
    find $tabdossier -type f -regextype posix-extended ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" -exec sh -c 'commandeAwk $@; echo "<br />"' {} {} \;
     
    # j'ai essayé de mettre $1, $@ ou $* entre guillemets etc… :
    # commandeAwk "$1"
    # commandeAwk '$1'
    # commandeAwk ${1}
    Mais rien n'y fait, tous ces essais me renvoient ceci :
    Le dossier mondossier ne possède pas de fichiers.
    [ --- Ce n'est pas une bonne piste, car ça ne fonctionne ni pour le dossier sans espaces ni pour celui qui en a,mais j'ai essayé ça aussi (en prenant pour nom de dossier exemple "dossier a tester") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    # ( … ) commandeAwk `$*`
    # ce qui renvoie :
     
    Dossier $tmp en cours de traitement ...
    /var/www/localhost/htdocs/adeline/codeStats/recup/dossier a traiter/ 
     
    # Alors que :
    # ( … ) commandeAwk `$1`
    # Renvoie :
    Dossier $tmp en cours de traitement ...
    /var/www/localhost/htdocs/adeline/codeStats/recup/dossier
    --- ]

  9. #29
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    je vais te le dire distinctement :

    U M Q !

  10. #30
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Points : 65
    Points
    65
    Par défaut
    Oui j'ai bien essayé dans tous les sens de rajouter des quotes, mais ça ne change rien…

  11. #31
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ Dir="mon dir"
    $ > "$Dir/mon fichier"
    $ find "$Dir" -type f -iname "mon*" -exec bash -c 'echo "fichier trouvé = $1"' {} {} \;
    fichier trouvé = mon dir/mon fichier
    tu vois ? ça fonctionne !

    edit: ah! c'est moi qui ait oublié de mettre des guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    find "$tabdossier" -type f \
                       -regextype posix-extended \
                       ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" \
                       -exec bash -c 'commandeAwk "$1"' {} {} \;
    désolé

  12. #32
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Points : 65
    Points
    65
    Par défaut
    Bonjour

    Ca marche pour les dossiers sans espaces, toujours pas pour ceux avec espaces… J'ai oublié quelque chose ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    #!/bin/sh
    tabdossier="$*"
    for d in "$tabdossier"
    do
    	tmp="${tabdossier%/*}"
    	tmp="${tmp##*/}"
    	commandeAwk() {
    		tmp2=${1#*$tmp}
    		tmp3=${tmp2#/}
     
    		awk 'BEGIN {  }
    			/^\#/ {nb6++}
    			/^\/\// || /\/\// {nb7++}
    	      		/^\/\*/, /\*\/$/ {nb8++}
    	      		/\/\*/, /\*\// {nb8bis++}
    	      		/^<!--/, /-->$/ {nb9++}
    	      		/<!--/, /-->/ {nb9bis++}
    	      		/^[ \t]*$/ {nb++}
    			END { if ( (nb6+nb7+nb8+nb8bis+nb9+nb9bis) < ((NR-nb)*(20/100)) ) {
    					print "<br /> <b>Fichier</b> <font color=grey>'$tmp'/'$tmp3'</font><br />";
    					print "Nombre total de lignes (non vides) : " (NR-nb) "<br />";
    				}
    			}
    			' $1
    	}
     
    	export -f commandeAwk
    	 explorer=`find "$tabdossier" -type f \
    				 -regextype posix-extended \
    				 ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" \
    				 -exec bash -c 'commandeAwk "$1"' {} {} \;`
    if [[ "$explorer" = "" ]]
    	then
    		echo "<br /><font color=\"2E9AFE\" size=4><b>Le dossier $tmp ne possède pas de fichiers. </b></font><br />"
    	else
    		echo "<br /><font color=\"2E9AFE\" size=4><b>Dossier $tmp en cours de traitement ... </b></font><br />"
    		echo "$explorer"
    	fi
    done
    exit 0;

  13. #33
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Il y a toujours un truc qui me chagrine dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tabdossier="$*"
    for d in "$tabdossier"
    A quoi sert la variable "$d" puisque dans la suite de ta boucle tu te sers de "$1" ?

  14. #34
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    dans commandeAwk, $1 doit être entre guillemets aussi,
    car awk ne reconnaîtra pas mon fichier, mais reconnaîtra "mon fichier".


    autres choses :
    - la boucle for est inutile, puisque tu ne te sers jamais de $d par la suite.
    - le test sur $explorer devrait s'écrire : if [ -z "$explorer" ]

  15. #35
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Points : 65
    Points
    65
    Par défaut
    Ah oui la boucle for avec $d c'est une erreur d'inattention de ma part…

    Du coup voici mon code corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #!/bin/sh
    tabdossier="$*"
    	tmp="${tabdossier%/*}"
    	tmp="${tmp##*/}"
    	commandeAwk() {
    		tmp2="${1#*$tmp}"
    		tmp3="${tmp2#/}"
     
    		awk 'BEGIN {  }
    			/^\#/ {nb6++}
    			/^\/\// || /\/\// {nb7++}
    	      		/^\/\*/, /\*\/$/ {nb8++}
    	      		/\/\*/, /\*\// {nb8bis++}
    	      		/^<!--/, /-->$/ {nb9++}
    	      		/<!--/, /-->/ {nb9bis++}
    	      		/^[ \t]*$/ {nb++}
    			END { if ( (nb6+nb7+nb8+nb8bis+nb9+nb9bis) < ((NR-nb)*(20/100)) ) {
    					print "<br /> <b>Fichier</b> <font color=grey>'$tmp'/'$tmp3'</font><br />";
    					print "Nombre total de lignes (non vides) : " (NR-nb) "<br />";
    				}
    			}
    			' "$1"
    	}
     
    	export -f commandeAwk
    	 explorer=`find "$tabdossier" -type f \
    				 -regextype posix-extended \
    				 ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" \
    				 -exec sh -c 'commandeAwk "$1"' {} {} \;`
    if [ -z "$explorer" ]
    	then
    		echo "<br /><font color=\"2E9AFE\" size=4><b>Le dossier $tmp ne possède pas de fichiers. </b></font><br />"
    	else
    		echo "<br /><font color=\"2E9AFE\" size=4><b>Dossier $tmp en cours de traitement ... </b></font><br />"
    		echo "$explorer"
    	fi
     
    exit 0;
    Mais c'est toujours pareil… Est ce que ça peut venir de fait que mon script est dans un fichier sh (mon fichier où se trouve ce script se nomme test.sh) ? faut il que je travaille en bash ?

  16. #36
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    oula ! tmp="${tabdossier%/*}" nonsi tu pouvais, à chaque fois, nous faire un copier/coller de ta commande, et des messages d'erreurs, ça aiderait un peu quand même (si c'est le même message pour différents dossiers/fichiers, tu coupes bien sûr ).

  17. #37
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Points : 65
    Points
    65
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    tabdossier="$*"
    echo "$tabdossier <br />"
    # affiche ceci :
    # /mon/chemin/dossier/autredossier/dossier a tester/
     
     
     
    tmp="${tabdossier%/}"
    echo "$tmp <br />"
    # /mon/chemin/dossier/autredossier/dossier a tester
     
    tmp="${tmp##*/}"
    echo "$tmp <br />"
    # dossier a tester
     
    # commandeAwk…
     
    echo "find \"$tabdossier\" -type f \
    				 -regextype posix-extended \
    				 ! -iregex \"$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )\" \
    				 -exec sh -c 'commandeAwk \"$1\"' {} {} \;"
     
    # find "/mon/chemin/dossier/autredossier/dossier a tester/" -type f -regextype posix-extended ! -iregex ".*\.css|.*\.ini|.*\.jpg|.*\.png|.*\.gif|.*\.sql|.*\.swf|.*\.pdf|.*\.xml|.*\.txt|.*\.plist|.*\.icns|.*\.rsrc|.*\.strings|.*\.nib|.*\.DS_Store|.*\.buildpath|.*\.project|.*\.BCI|.*\.xcf|.*\.bmp|.*\.sh|jquery" -exec sh -c 'commandeAwk "/mon/chemin/dossier/autredossier/dossier"' {} {} \; 
     
    	 explorer=`find "$tabdossier" -type f \
    				 -regextype posix-extended \
    				 ! -iregex "$(sed ':x;s/[\n ,]/|/g; s/\*\./.*\\./g;N;bx' elements_a_exclure.txt )" \
    				 -exec sh -c 'commandeAwk "$1"' {} {} \;`
     
    	if [ -z "$explorer" ]
    	then
    		echo "<br /><font color=\"2E9AFE\" size=4><b>Le dossier $tmp ne possède pas de fichiers. </b></font><br />"
    	else
    		echo "<br /><font color=\"2E9AFE\" size=4><b>Dossier $tmp en cours de traitement ... </b></font><br />"
    		echo "$explorer"
    	fi
    et en gros quand je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if [ -z "$explorer" ]
    	then
    		echo "<br /><font color=\"2E9AFE\" size=4><b>Le dossier $tmp ne possède pas de fichiers. </b></font><br />"
    	else
    		echo "<br /><font color=\"2E9AFE\" size=4><b>Dossier $tmp en cours de traitement ... </b></font><br />"
    		echo "$explorer"
    	fi
    Si le dossier n'a pas d'espaces ça va afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dossier dossieratester en cours de traitement ... 
    Fichier /mon/chemin/dossier/autredossier/dossieratester/_PHP/mon_fichier.php
    Nombre total de lignes (non vides) : 66
     
    Fichier /mon/chemin/dossier/autredossier/dossieratester/_JS/mon_fichier.js
    Nombre total de lignes (non vides) : 142
     
    # etc...
    Sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Le dossier dossier a tester ne possède pas de fichiers.
    Mais ça ne renvoie pas d'erreur

  18. #38
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    et quand tu exécutes le find directement dans la console ?
    find "/mon/chemin/dossier/autredossier/dossier a tester/" […]
    il faut écrire la fonction commandeAwk, et l'exporter !

    et dans commandeAwk, remplace $tmp/$tmp3, par FILENAME

  19. #39
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Points : 65
    Points
    65
    Par défaut
    Oui je l'écris bien la fonction commandeAwk, je l'ai pas remise pour ne pas me répéter ici

    le FILENAME fonctionne bien, j'ai modifié la ligne correspondante dans le code awk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "<br /> <b>Fichier</b> <font color=grey>" FILENAME "</font><br />";
    Je n'ai pas essayé directement dans la console, j'y cours

    Je reviens

    EDIT

    Il semblerait que le problème vient d'avant l'utilisation de ce script.
    En effet, j'envoie en paramètre le chemin /mon/chemin/dossier/dossier a tester/ à mon script test.sh
    (je le récupère donc avec cette ligne : ) ;

    mais avant ça, j'exporte le dossier concerné depuis le svn avec cette commande dans une page php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $dossier = 'dossier a tester';
    $svn = addslashes($dossier);
    // déjà ici cest bizarre il ne met pas dantislash devant les espaces si je fais un echo $svn…
     
    exec('svn export svn://192.168.1.69/var/svn/repos/'.$svn.'/ /mon/chemin/dossier/'.$svn.'/ --username serveur --password serv2311 --no-auth-cache --non-interactive',$retour);
    Et quand je vérifie si le dossier s'est bien exporté, ça fonctionne pour les dossiers sans espaces dans leur nom, mais pas pour ceux qui en ont et je n'avais rien vu ! désolée :s

    Donc je pense que ton script fonctionne bien pour tout, je vais voir si je peux protéger correctement les espaces dans le nom du dossier à exporter depuis le svn…

    :::RE EDIT:::

    J'ai fait la commande export svn direct dans la console pour voir quelles erreurs ça renvoie :
    Cas d'un dossier sans espaces (fonctionne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    svn export svn://192.168.1.69/var/svn/repos/dossier1/ /mon/chemin/dossier1/ --username serveur --password serv2311 --no-auth-cache --non-interactive
     
    # ce que ça renvoie :
    A    /mon/chemin/dossier1
    A    /mon/chemin/dossier1/trunk
    A    /mon/chemin/dossier1/branches
    A    /mon/chemin/dossier1/tags
    Exporté à la révision 10641.
    Cas d'un dossier avec espaces :
    Sans échapper les espaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    svn export svn://192.168.1.69/var/svn/repos/dossier a tester/ /mon/chemin/dossier a tester/ --username serveur --password serv2311 --no-auth-cache --non-interactive 
     
    # ce que ça renvoie :
    svn: Essayer 'svn help' pour plus d'information.
    svn: Erreur lors de l'analyse des arguments
    En échappant les espaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    svn export svn://192.168.1.69/var/svn/repos/dossier\ a\ tester/ /mon/chemin/dossier\ a\ tester/ --username serveur --password serv2311 --no-auth-cache --non-interactive
     
    # ce que ça renvoie :
    svn: L'URL 'svn://192.168.1.69/var/svn/repos/dossier%20a%20tester' n'existe pas

  20. #40
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    au pif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    svn export svn://192.168.1.69/var/svn/repos/dossier%20a%20tester/ /mon/chemin/dossier\ a\ tester/ --username serveur --password serv2311 --no-auth-cache --non-interactive

    ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [JDOM] Ajouter des éléments dans un fichier XML
    Par pitchu dans le forum Format d'échange (XML, JSON...)
    Réponses: 14
    Dernier message: 25/12/2015, 11h06
  2. Réponses: 6
    Dernier message: 17/11/2013, 21h32
  3. Réponses: 0
    Dernier message: 27/08/2012, 12h21
  4. [Encodage] Un classique : prendre des éléments dans un fichier texte
    Par DkA59 dans le forum Langage
    Réponses: 13
    Dernier message: 02/04/2011, 16h17
  5. [swing] disposition des éléments dans un GridLayout
    Par al85 dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 11/02/2005, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo