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 :

Traitement par lot


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Artiste
    Inscrit en
    Février 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Artiste

    Informations forums :
    Inscription : Février 2020
    Messages : 7
    Par défaut Traitement par lot
    Bonjour à tous et à toutes,
    je débute dans ce domaine et bien évidemment j'ai quelques difficultés.
    Voici mon problème, j'aimerais utiliser le programme wav2vec sur 11974 fichiers, ils sont tous numérotés comme suit :
    monfichier-00001.wav, monfichier-00002.wav, etc.
    Voici la ligne de programme que je souhaite itérer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wav2vec adresse1/fichier-00001.wav --format CSV > adresse2/fichier-00001.csv
    Je souhaite aussi changer l'adressage (adresse1 à adresse2)

    Si vous pouviez m’orienter j'en serrait ravi.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 139
    Par défaut
    Bonjour,

    Une solution serait :
    • une boucle for sur la liste des fichiers du modèle adresse1/*.wav
    • dans la boucle on exécute la commande demandée en utilisant la variable de boucle en entrée et en en extrayant le nom de fichier (commande filename) pour le fichier de sortie
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 300
    Par défaut
    Bonjour

    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
    42
    $ for ((i=1;i<=11974;i++)); do nom="fichier-$(printf '%05i' $i)"; echo "wav2vec adresse1/$nom.wav --format CSV > adresse2/$nom.csv";done
    wav2vec adresse1/fichier-00001.wav --format CSV > adresse2/fichier-00001.csv
    wav2vec adresse1/fichier-00002.wav --format CSV > adresse2/fichier-00002.csv
    wav2vec adresse1/fichier-00003.wav --format CSV > adresse2/fichier-00003.csv
    wav2vec adresse1/fichier-00004.wav --format CSV > adresse2/fichier-00004.csv
    wav2vec adresse1/fichier-00005.wav --format CSV > adresse2/fichier-00005.csv
    wav2vec adresse1/fichier-00006.wav --format CSV > adresse2/fichier-00006.csv
    wav2vec adresse1/fichier-00007.wav --format CSV > adresse2/fichier-00007.csv
    wav2vec adresse1/fichier-00008.wav --format CSV > adresse2/fichier-00008.csv
    wav2vec adresse1/fichier-00009.wav --format CSV > adresse2/fichier-00009.csv
    wav2vec adresse1/fichier-00010.wav --format CSV > adresse2/fichier-00010.csv
    wav2vec adresse1/fichier-00011.wav --format CSV > adresse2/fichier-00011.csv
    wav2vec adresse1/fichier-00012.wav --format CSV > adresse2/fichier-00012.csv
    wav2vec adresse1/fichier-00013.wav --format CSV > adresse2/fichier-00013.csv
    wav2vec adresse1/fichier-00014.wav --format CSV > adresse2/fichier-00014.csv
    wav2vec adresse1/fichier-00015.wav --format CSV > adresse2/fichier-00015.csv
    wav2vec adresse1/fichier-00016.wav --format CSV > adresse2/fichier-00016.csv
    wav2vec adresse1/fichier-00017.wav --format CSV > adresse2/fichier-00017.csv
    wav2vec adresse1/fichier-00018.wav --format CSV > adresse2/fichier-00018.csv
    wav2vec adresse1/fichier-00019.wav --format CSV > adresse2/fichier-00019.csv
    wav2vec adresse1/fichier-00020.wav --format CSV > adresse2/fichier-00020.csv
    (...)
    wav2vec adresse1/fichier-11955.wav --format CSV > adresse2/fichier-11955.csv
    wav2vec adresse1/fichier-11956.wav --format CSV > adresse2/fichier-11956.csv
    wav2vec adresse1/fichier-11957.wav --format CSV > adresse2/fichier-11957.csv
    wav2vec adresse1/fichier-11958.wav --format CSV > adresse2/fichier-11958.csv
    wav2vec adresse1/fichier-11959.wav --format CSV > adresse2/fichier-11959.csv
    wav2vec adresse1/fichier-11960.wav --format CSV > adresse2/fichier-11960.csv
    wav2vec adresse1/fichier-11961.wav --format CSV > adresse2/fichier-11961.csv
    wav2vec adresse1/fichier-11962.wav --format CSV > adresse2/fichier-11962.csv
    wav2vec adresse1/fichier-11963.wav --format CSV > adresse2/fichier-11963.csv
    wav2vec adresse1/fichier-11964.wav --format CSV > adresse2/fichier-11964.csv
    wav2vec adresse1/fichier-11965.wav --format CSV > adresse2/fichier-11965.csv
    wav2vec adresse1/fichier-11966.wav --format CSV > adresse2/fichier-11966.csv
    wav2vec adresse1/fichier-11967.wav --format CSV > adresse2/fichier-11967.csv
    wav2vec adresse1/fichier-11968.wav --format CSV > adresse2/fichier-11968.csv
    wav2vec adresse1/fichier-11969.wav --format CSV > adresse2/fichier-11969.csv
    wav2vec adresse1/fichier-11970.wav --format CSV > adresse2/fichier-11970.csv
    wav2vec adresse1/fichier-11971.wav --format CSV > adresse2/fichier-11971.csv
    wav2vec adresse1/fichier-11972.wav --format CSV > adresse2/fichier-11972.csv
    wav2vec adresse1/fichier-11973.wav --format CSV > adresse2/fichier-11973.csv
    wav2vec adresse1/fichier-11974.wav --format CSV > adresse2/fichier-11974.csv

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 730
    Par défaut
    je trouve que le nombre de fichiers n'est pas une donnée exploitable, car ce nombre est susceptible de changer !

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 300
    Par défaut
    Je trouve que l'extension n'est pas une donnée exploitable car d'autres wav du dossier ne doivent pas être la cible du script.

  6. #6
    Membre régulier
    Homme Profil pro
    Artiste
    Inscrit en
    Février 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Artiste

    Informations forums :
    Inscription : Février 2020
    Messages : 7
    Par défaut
    Merci beaucoup à vous tous,
    à al1_24 tout d'abord car je demandais bien une orientation, la remarque de N_BaH me semble des plus judicieuses (tout autant que les liens de sa signature) et enfin à Flodelarab qui trouve une réponse immédiate.
    j'ai encore tellement à apprendre que je suis certain de venir vous questionner à nouveau.
    Merci encore.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 730
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    [...] d'autres wav du dossier ne doivent pas être la cible du script.
    ce n'est pas dit.

    il n'est pas non plus dit que les nombres se suivent.

  8. #8
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut ET l'utilisation de find :)
    Pourquoi ne pas utiliser "find"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find adresse1 -type f -name "fichier-*.wav" -exec ./mon_shell.sh {} \;
    où mon_shell.sh va lancer "wav2vec" et prendre en compte le fichier en paramètre pour générer le "csv" dans adresse2

    cat mon_shell.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
    F=$1
     
    if [ -f "$F" ]
    then
       F_Source=`basename $F`
       F_Target="./adresse2/${F_Source%%.*}.csv"
       echo "wav2vec ${F} --format CSV > $F_Target"
    else
      echo "$F n'existe pas "
    fi
    Exemple de Resultat avec 11 fichiers wav dans adresse1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    wav2vec adresse1/fichier-1.wav --format CSV > ./adresse2/fichier-1.csv
    wav2vec adresse1/fichier-10.wav --format CSV > ./adresse2/fichier-10.csv
    wav2vec adresse1/fichier-11.wav --format CSV > ./adresse2/fichier-11.csv
    wav2vec adresse1/fichier-3.wav --format CSV > ./adresse2/fichier-3.csv
    wav2vec adresse1/fichier-4.wav --format CSV > ./adresse2/fichier-4.csv
    wav2vec adresse1/fichier-5.wav --format CSV > ./adresse2/fichier-5.csv
    wav2vec adresse1/fichier-6.wav --format CSV > ./adresse2/fichier-6.csv
    wav2vec adresse1/fichier-7.wav --format CSV > ./adresse2/fichier-7.csv
    wav2vec adresse1/fichier-8.wav --format CSV > ./adresse2/fichier-8.csv
    wav2vec adresse1/fichier-9.wav --format CSV > ./adresse2/fichier-9.csv

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 730
    Par défaut
    quelques corrections commentées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    fichier="$1"
     
    # le test est inutile, parce que `find' remonte uniquement des fichiers qui existent.
    #    F_Source=`basename $F`
        F_Source="${fichier##*/}" # voir la ligne en-dessous
        F_Target="./adresse2/${F_Source%%.*}.csv"
        echo "wav2vec \"$fichier\" --format CSV > \"$F_Target\"" # pour se souvenir qu'il faut des guillemets autour des variables

  10. #10
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 418
    Par défaut
    Et pourquoi utiliser un script shell avec find au lieu d'utiliser wav2vec avec find ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 730
    Par défaut
    pour le "renommage" ?!
    pour la condition ? mais vu que je m'en suis débarrassée, ça pourrait tenir dans un -exec sh -c '...' \;'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find adresse1 -type f -regextype posix-extended -regex '^adresse1/fichier-[0-9]{5}\.wav$' -exec /bin/sh -c ' fn=$(basename -s .wav "{}"); wav2vec "$fn" --format CSV >"adresse2/$fn.csv"' ' \;

  12. #12
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 418
    Par défaut
    J'attendais plus une réponse de argoet, mais pourquoi pas...

    Et en trichant un peu, on peut aussi se passer de basename (pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ...... -exec bash -c '[[ "{}" =~ '^.*/\(.*\)\.wav$' ]] &&  wav2vec  "{}" --format CSV >"adresse2/${BASH_REMATCH[1]}.csv"' \;

  13. #13
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    J'attendais plus une réponse de argoet, mais pourquoi pas...

    Et en trichant un peu, on peut aussi se passer de basename (pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ...... -exec bash -c '[[ "{}" =~ '^.*/\(.*\)\.wav$' ]] &&  wav2vec  "{}" --format CSV >"adresse2/${BASH_REMATCH[1]}.csv"' \;
    Bonjour Disedorgue
    En fait l'idée était que ce soit simple et clair (juste histoire de s'inspirer de ce que j'ai proposé )
    et je ne suis pas forcement adepte des solutions "tous sur une même ligne" ou à la relecture le "capilotractage" est , trop souvent , de rigueur

    Mais c'est toujours très enrichissant à vous lire , et je vous en remercie vivement
    @Argoet

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

Discussions similaires

  1. Traitement par lot pour rajouter un copyright.
    Par Tristan_C dans le forum Imagerie
    Réponses: 3
    Dernier message: 11/10/2008, 14h04
  2. [Data] Traitement par lot
    Par titeuf92 dans le forum Spring
    Réponses: 1
    Dernier message: 25/03/2008, 12h51
  3. Réponses: 6
    Dernier message: 31/01/2008, 07h34
  4. Utiliser Log4J comme sortie d'un traitement par lots.
    Par Pierre8r dans le forum Logging
    Réponses: 1
    Dernier message: 24/11/2007, 12h34
  5. [FTP] Traitement par lot
    Par gandalf76fr dans le forum Langage
    Réponses: 5
    Dernier message: 07/11/2007, 00h04

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