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

Shell et commandes GNU Discussion :

[shell] variable de recherche à partir d'une liste


Sujet :

Shell et commandes GNU

  1. #41
    Membre régulier
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Points : 75
    Points
    75
    Par défaut
    En repartant sur le code initial je suis arrivé au point ou il me récupère bien toute les données et me crée les dossiers, mais à chaque fichier son dossier ce qui me pose un soucis...Ainsi que, il me garde les numéros pour la création du nom de dossier et je ne dois pas les avoir dedans...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash -x
    shopt -s extglob
    src="/mnt/a_trier"
    dest="/mnt/trier"
    ext=".txt"
     
    find "$src" -type f -printf '%h|%f\n' | while IFS='|' read d f #<list.txt
    do
     
       test -d "$dest" |  mkdir -p "$d/$f" "$dest"
        echo cp "$d/$f" "$dest/${f//+([_]|[%]|[-]|[$ext])/ }"
    done

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 594
    Points : 19 473
    Points
    19 473
    Par défaut
    je me suis mal expliqué plus tôt : | est un pipe; c'est une commande qui permet de connecter la sortie standard d'une commande à l'entrée standard de la suivante.
    la commande interne test ne produit aucune sortie standard qui pourrait être passée à la commande mkdir !

    il faut une deuxième barre verticale pour faire un OU logique (la commande précédente a échoué) (le ET logique (la commande précédente a réussi), c'est &&; alors qu'un seul & passe la commande précédente en arrière-plan).

    c'est subtil

    ce que tu veux faire, c'est
    Code pseudo-code : Sélectionner tout - Visualiser dans une fenêtre à part
    $repertoire est un répertoire, OU créer $repertoire

    mais ici le répertoire à créer (d'ailleurs tu tentes d'en créer deux: $d/$f et $dest) n'est pas encore transformé selon tes critères, et que je t'ai exposé dans mon précédent code.

  3. #43
    Membre régulier
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Points : 75
    Points
    75
    Par défaut
    Exact, j'ai déjà essayé de reprendre le code précédent que tu m'as fourni pour avoir un résultat donnant sur quelque chose me permettant de voir là en vrai où je veux arriver.
    Mais pour ajouter la transformation au mkdir je l'avoue, je ne vois pas comment faire.

    Si je comprends bien le & si la commande échoue il ne va pas plus loin. Et dans mon cas il faut coupler un OU avec un &&.

    Je me représente ça en fait avec comme référence un if exist ne rien faire
    ou if not exist mkdir...(mes souvenirs de batch windows)

    Et dans le cas présent il faudrait remplacer le test par un équivalent du if exist

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 594
    Points : 19 473
    Points
    19 473
    Par défaut
    mais non, pas besoin d'un if pour les conditions simples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ mkdir monRepertoire
    $ test -d monRepertoire && echo "monRepertoire existe" || echo "monRepertoire n'existe pas"
    monRepertoire existe
    $ rmdir monRepertoire
    $ test -d monRepertoire && echo "monRepertoire existe" || echo "monRepertoire n'existe"
    monRepertoire n'existe
    la transformation à faire avant le test à faire sur le nom transformé est dans mon dernier code.

  5. #45
    Membre régulier
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Points : 75
    Points
    75
    Par défaut
    d'accord et merci, je test ça en rentrant ce soir je viens de finir la moitié du traitement de la semaine passé à la main et ça va prendre la journée pour finir

  6. #46
    Membre régulier
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Points : 75
    Points
    75
    Par défaut
    Alors en reprenant tout à plat

    On était reparti sur un find /mnt/sda1 -type f qui a été mit de côté pour ensuite revenir sur le shopt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     shopt -q extglob || shopt -s extglob
    echo "fichier_-_b_zar%123.ext
    fichier_-_b_zar%1234.ext
    fichier_-_b_zar%12345.ext
    Fichtemp_-_ko%_54.ext
    Fichtemp_-_ko%_545.ext" | while read f; do f="${f//?(_)+([0-9])}"; f="${f%.*}"; echo "$f"; done
    fichier_-_b_zar%
    fichier_-_b_zar%
    fichier_-_b_zar%
    Fichtemp_-_ko%
    Fichtemp_-_ko%
    La partie où j'ai du mal, je suis obligé de lister tout mes fichiers dans le script ? (désolé des questions bêtes mais je préfère être sur de moi au moindre doute).

    Et sous la recherche avec le shopt on y incruste le code que tu m'as passé en dernier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mkdir monRepertoire
    test -d monRepertoire && echo "monRepertoire existe" || echo "monRepertoire n'existe pas"
    monRepertoire existe
    rmdir monRepertoire
    test -d monRepertoire && echo "monRepertoire existe" || echo "monRepertoire n'existe"
    monRepertoire n'existe
    Difficile de réfléchir après une journée de 11h

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 594
    Points : 19 473
    Points
    19 473
    Par défaut
    ce sont des exemples, pour valider les manipulations sur les noms des fichiers.

    on reste sur du find ... | while IFS='|' read d f....
    sauf que le répertoire "intermédiaire" (entre la $src, et le nom du fichier) est, selon tes dires, inutile; donc il ne faut plus l'afficher avec -printf, autant que le pseudo séparateur (|)
    ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    src=/mnt/sda1
    dest=/mnt/sda6
    find ... -printf '%f\n' | while read f;
    do
       dir="${f//?(_)+([0-9])}"; dir="${dir%.*}"
    ...
    done
    il va falloir que j'écrive le code en entier, ou tu vas t'en sortir maintenant ?

    il faut vraiment, mais VRAIMENT, que tu lises un tuto sur l'écriture de scripts shell !
    au hasard, celui qui apparaît dans ma signature, ou l'ABS...

    parce qu'on n'est quand même pas là pour faire ton boulot, ou alors, on veut la paie qui va avec !

  8. #48
    Membre régulier
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Points : 75
    Points
    75
    Par défaut
    Merci encore, ça devrait être bon avec tout ça.
    Pour le shell disons que pas mal de choses m’échappent encore comme je l'ai dit au tout début. Je n'ai que les bases pour faire des "pseudo" scripts.

    J'apprends sur le tas en essayant de comprendre les codes ou avec des explications quitte à reposer des questions basiques...

    Je passe donc le post en résolu, merci de ta grande aide.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/07/2010, 15h10
  2. [MySQL] effectuer recherche à partir d'une liste deroulante
    Par manguigs dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/05/2009, 16h48
  3. Réponses: 18
    Dernier message: 31/01/2009, 15h05
  4. Moteur de recherche à partir d'une liste de critères
    Par ionnette dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 27/06/2008, 09h30
  5. Créer une variable d'environnement à partir d'une liste de fichier
    Par ddams dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 23/02/2007, 20h03

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