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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    Par défaut [shell] variable de recherche à partir d'une liste
    Bonjour,

    Voilà 2 jours que je cherche déjà de manière théorique et un peu en pratique sans grand succès pour mon faible niveau en shell, la manière de traiter une liste de fichier à partir d'une liste txt .

    Je reçoit un fichier quotidien txt recensant des centaines (stock/nbr de vente...) de fichier sur une machine à trier actuellement...à la main.

    Et en fonction de ces fichiers ils doivent être classé sur différentes partitions avec un dossier à créer ou, si déjà existant sur celles ci, simplement le déplacer.
    Le gros hic est que je dois exclure les numéros et caractère speciaux présent dans la liste (fichier numéroté dans le nom et malheureusement ce n'est pas une date...) ou dans le cas contraires lire le contenu du répertoire d'arrivée.

    les noms se présentes sous la forme suivante:
    Stockcentralparis001
    Stock externe 0054...
    Journee_154_brest

    Comme je recommence un script de zéro, j'ai déjà testé une fois dans le dossier principal de refaire une liste basique et en lui attribuant le simple droit de lecteur pour que le script ne modifie rien, mais le soucis se passe sur la lecture du contenu, rien ne se passe.

    J'ai testé quelque chose en très basique et un peu brute.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
    ls -R >liste.txt
    chmod 444 liste.txt
    read -r liste.txt
    -R car j'ai parfois certains sous dossier mais ont les mêmes traitement que les fichiers racine.
    Mon read ne retourne rien pour la suite.

    J'ai cherché un peu avec xarg mais ne j'ai rien trouvé d'applicable pour lire le contenu et ensuite lancer un traitement du type " if = 1 (existe déja) move and increase sans créer de dossier if = 0 (n'existe pas) créer le dossier & move"

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 636
    Par défaut
    Bonjour,

    la commande interne read lit des données depuis l'entrée standard; pas depuis un fichier (pas toute seule : Comment lire/parcourir un fichier)
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    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
    Par défaut
    Donc oui après avoir lu le poste (merci pour le lien)

    je dois partir sur une boucle avec while, le problème restant qui ne pourra pas faire avancer le projet est, y a t'il moyen de ne pas tenir compte des caractères spéciaux ou des numéros de la lecture. je pensais faire l'exception avec mais le soucis est que j'ai du mal à la construction "complexe" avec cette commande.

    Une base plus propre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    $repertoire=/sda06/*
    $fichier="${repertoire}/liste.txt"
    ls -R >$fichier
    chmod 444 $fichier
    while read Ligne
    do echo "$Ligne"
    done < $fichier

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 636
    Par défaut
    qu'entends-tu exactement par «ne pas tenir compte des caractères spéciaux ou des numéros de la lecture»
    les numéros, je vois bien; mais les «caractères spéciaux» pas forcément comme toi
    tu peux nous montrer un avant/après, s'il te plaît.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé
    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
    Par défaut
    Disons que la j'en ai pas 36 il s'agit de: - _ [ ] % j'ai dû faire le tour des plus utilisés dans les noms de fichiers.
    Travaillant avec beaucoup de distributeur et client c'est à moi d'adapter le traitement et non de faire une normalisation des noms de fichiers plus tôt casse tête car tout le monde n'a pas la même façon de les traités avant la réception sur mes machines.

    Je dois les exclure avec les numéros pour le classement ne répertoire portant le même nom.
    Qu'il voit enfaîte le nom comme si c’était des espaces partout...

    Gestion_de_stock ou gestion%de%stock resterai interpréter en Gestion de stock.

    Ou alors faire un rename en remplaçant les caractère par des espaces...
    Les fichiers sont après traités à partir de personnes ayant peu de connaissances informatique et mit à disposition de services sur des répertoires sous windows.

    Il y a déjà une automatisation où, une fois le fichier rangé et au bon format, un script ftp les récupères simplement.

    Ayant récupéré le poste il y a peu j'essai de faire une automatisation au lieu de tout faire à la main (et ca me prend une bonne matinée pour traiter 2 à 3 jours)

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par aerane Voir le message
    Ayant récupéré le poste il y a peu j'essai de faire une automatisation au lieu de tout faire à la main
    ça semble être une bonne idée!

    (et ca me prend une bonne matinée pour traiter 2 à 3 jours)
    Si tu pouvais nous montrer sur une dizaine de lignes ce que tu fais à la main, on verrait mieux ce qu'il te faut!

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par aerane Voir le message
    y a t'il moyen de ne pas tenir compte des caractères spéciaux ou des numéros de la lecture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    $repertoire=/sda06/*
    $fichier="${repertoire}/liste.txt"
    ls -R >$fichier
    chmod 444 $fichier
    while read Ligne
    do echo "$Ligne"
    done < $fichier
    Quelles sont les spécifications?

    Veux-tu dire (en pseudo-pseudo-code):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
    repertoire=/sda06/*
    fichier="${repertoire}/liste.txt"
    ls -R >$fichier
    chmod 444 $fichier
    while read Ligne
    do echo "$Ligne"
      # copier le fichier dont le nom est décrit dans "$Ligne"
      #   dans un répertoire (à déterminer selon certains critères)
      #   en supprimant du nom original certains caractères (qui ne me plaisent pas... oops... qui peuvent poser problème)
    done < $fichier

+ Répondre à la discussion
Cette discussion est résolue.

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