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 :

Problème boucle for ?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par défaut [ Résolu ] Problème boucle for ?
    Bonsoir.

    Je voulais faire un petit script pour renommer une serie de fichiers qui se présente comme ceci:
    08-12-11 - Direct 8 - Pas de description - 11_12_08_.ts
    08-12-10 - Direct 8 - Pas de description - 10_12_08_.ts.001
    je veux les renommer comme ca:
    11_12_08_.ts.ok
    10_12_08_.ts.001.ok
    je n'y suis pris comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    LISTE=$(ls *.ts* | awk '{print $10}')
     
    for FIC in $LISTE
    do	
    	echo $FIC
    done
    me renvoie bien
    10_12_08_.ts.001
    11_12_08_.ts
    par contre si je fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    LISTE=$(ls *.ts* | awk '{print $10}')
     
    for FIC in $LISTE
    do	
    	mv "$FIC" "$FIC.ok"
    done
    Me renvoie
    mv: ne peut évaluer `10_12_08_.ts.001': Aucun fichier ou dossier de ce type
    mv: ne peut évaluer `11_12_08_.ts': Aucun fichier ou dossier de ce type
    pourquoi ?

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 639
    Par défaut
    Le problème vient, apparemment, de ce que ta LISTE ne contient pas les noms des fichiers dont tu veux modifier le nom...
    Si le nom de l'un de tes fichiers à renommer est :
    08-12-11 - Direct 8 - Pas de description - 11_12_08_.ts
    alors que ta LISTE, elle, contient :
    11_12_08_.ts
    il est bien évident que mv ne retrouvera pas le fichier (puisqu'il n'existe pas de fichier nommé ainsi).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for fichier in ./*.ts*
      do
      mv "$fichier" "${fichier##*- }.ok"
    done
    N'oublie pas les guillemets, vu que tes noms de fichiers contiennent des espaces.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    Sinon regarde rename sa syntaxe est proche de celle de sed.
    Cet utilitaire sert justement à renommer les fichiers.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par défaut
    Merci des réponses.

    Je me suis un peu mélanger en fait je voulais faire comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for FIC in *.ts*
    do
        fin=$(ls -l "$FIC" | awk '{print $18}')
    	mv "$FIC" "$fin"
    done
    De plus la syntaxe mv "$fichier" "${fichier##*- }.ok"
    je comprend mv du 1er mais la suite de la découpe fichier##*- peut tu expliquer.

    Merci.

  5. #5
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    Petit exemple avec rename :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    expression à renommer : 08-12-11 - Direct 8 - Pas de description - 11_12_08_.ts
    résultat voulu : 11_12_08_.ts.ok
    
    commande à lancer : rename "s/(.*) - (.*) - (.*) - (.*)(\.ts)/\4\5\.ok/ *.ts"
    Edit : petite correction.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 639
    Par défaut
    Dans le man bash, c'est appelé Remplacement de paramètres, il y en a de nombreux. Il y en a pour donner un autre paramètre si le premier est absent, ou le contraire... enfin, tout plein tout plein...
    La forme ${var##*- } demande que tout ce qui précède le dernier '- ' soit supprimé.
    ${var#*- } par contre, ne supprime le contenu de var que jusqu'à la première occurrence de '- '.
    Il existe leurs contraires ${var%%motif} et ${var%motif}
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par défaut
    Super merci a tous pour les explications

    Bonne fin de journée.

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

Discussions similaires

  1. Problème boucle for
    Par revsys dans le forum Delphi
    Réponses: 20
    Dernier message: 24/05/2007, 15h50
  2. Problème boucle for
    Par rouliane dans le forum C++
    Réponses: 2
    Dernier message: 14/12/2006, 14h37
  3. [VBA-E, Débutant] Problème Boucle for
    Par strifer dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/08/2006, 12h30
  4. [Débutant] Problème boucle for
    Par toniooooo dans le forum Langage
    Réponses: 10
    Dernier message: 18/04/2006, 14h42
  5. [FLASH 8] Problème Boucle For
    Par Begood dans le forum Flash
    Réponses: 6
    Dernier message: 21/03/2006, 11h36

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