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 :

[script bach] Problème sur la variable de nom de fichier


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 [script bach] Problème sur la variable de nom de fichier
    Salut,

    Je rencontre un petit soucis avec un script pour trier des fichiers dans différent sous répertoires (je débute en script shell avec quelques connaissances basique de batch):
    Grossomodo je suis dans le dossier /des_files contenant des sous dossier /toto1 toto2...qui eux contiennent des fichier *.ext
    Mais dans ces sous dossier, je ne souhaite garder que 2 types en les copiant dans un autre répertoire avec un nom identique que le dossier parent.
    Les .ext sont différencier par le format *-0.ext et *-1.ext, la devanture du * est composée de numéro et lettre du type Files001AAMJJ-0.ext.
    C'est le seul moyen que j'ai de les différencier.

    En début de script j'avais cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    TYPE=ext
    FILE=*-0
    REP=/home/user/Bureau/des_files
    REP2=/home/user/Bureau/test
    for img in  $REP/$FILE.$TYPE;
    do cp    $FILE.$TYPE $REP $REP2;
    done 
    #if not exist $REP2 ;
    #do
    #mkdir -p /home/user/Bureau/$REP2; 
    #done
    #fi
    Le IF est commenté car déjà la première partie ne fonctionne pas, j'ai en message de retour:
    cp: impossible d'évaluer «*-0.ext»: Aucun fichier ou dossier de ce type
    cp: omission du répertoire «/home/user/Bureau/des_files»
    Le nom aussi est encore non inscrit, je ne sais pas trop comment formuler cela :/

    Merci

  2. #2
    Membre expérimenté Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Par défaut
    Je verrais plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TYPE=ext
    FILE=*-0
    REP=/home/user/Bureau/des_files
    REP2=/home/user/Bureau/test
    for img in  $REP/$FILE.$TYPE;
    do cp    $img $REP/ $REP2/
    done
    La ligne 6 est corrigée car c'est '$img' qui prend la valeur du nom de fichier et il ne faut pas oublier le slash à la fin du nom de dossier de destination, sinon cp prendra ça pour un nom de fichier !
    D'autre part, la commande mkdir -p ne nécessite pas de vérifier si le répertoire existe.

  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
    Merci de ta réponse,

    Alors j'ai intégré le changement de base par rapport a ce que tu m'as fournit
    J'ai vu je n'ai pas très bien préciser pour quel partie 'avais le retour:

    cp: impossible d'évaluer «*-0.ext»: Aucun fichier ou dossier de ce type
    cp: omission du répertoire «/home/user/Bureau/des_files

    Il s'agit de la première partie, le cp. Même avec la modification apporté j'ai le même retour.
    Je pense qu'il n'arrive pas a le trouvé car il ne cherche pas dans les sous répertoires. Comment faire cela ? y intégrer un cd de chaque sous répertoires ? (il y en a plus de 60)

    pour le mkdir, quel moyen puis je utiliser pour qu'il prenne le nom du dossier qui contient le fichier.
    Par exemple il est dans /Bureau/des_files/Log_des1. Le nom que je souhaites que le dossier prenne est le /Log_des1, le dossier crée a partir du fichier du sous répertoire suivant /Bureau/des_files/Log_des2 ainsi de suite...

  4. #4
    Membre expérimenté Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Par défaut
    Ce serait déjà bien d'essayer comme ça (et ça simplifie)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cd /home/user/Bureau/des_files
    for img in *-0.ext; do
    echo $img    # pour voir ce que ça donne
    #   cp $img /home/user/Bureau/test/
    done

  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
    Citation Envoyé par fransoo Voir le message
    Ce serait déjà bien d'essayer comme ça (et ça simplifie)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cd /home/user/Bureau/des_files
    for img in *-0.ext; do
    echo $img    # pour voir ce que ça donne
    #   cp $img /home/user/Bureau/test/
    done
    Le retour du echo est bon pour moi, le soucis se poses sur passé dans tout les sous répertoires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    aerane@aerane-GX723:~/Bureau$ ./test.sh
    *-0.jpg

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Par défaut
    Bonjour,

    La fonctionnalité que vous recherchez vous sera donné par find, qui fera une recherche récursive dans vos sous répertoire. Passez le résultat dans xargs pour jouer votre commande. Tout se fait alors en une ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TYPE=ext
    FILE=*-0
    REP=/home/user/Bureau/des_files
    REP2=/home/user/Bureau/test
     
    # Je préfere tester REP2 ici
    [[ -d $REP2 ]] || mkdir -p $REP2
     
    find $REP -name "$FILE.$TYPE" -print0 | xargs -0 -I % cp % $REP2
    Le puriste de find diront peut-être qu'il faut utiliser -exec. Je préfère xargs personnellement .

    Pour plus de précision sur les commandes utilisées, ce sera mieux pour vous d'aller voir les man.

    PS : dans votre code commenté, vous testez l'existence répertoire REP2 pour le recréer. Vous devriez le faire avant la copie, sinon je vous laisse imaginé quel problème vous allez avoir.

Discussions similaires

  1. Problème sur la variable IE <aucune variable>
    Par licwimi dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/10/2012, 21h41
  2. Problème sur des variables.
    Par Conjugue dans le forum Débuter
    Réponses: 4
    Dernier message: 17/03/2012, 18h50
  3. [PHP 5.2] Problème sur les Variables Variables
    Par bpdelavega dans le forum Langage
    Réponses: 17
    Dernier message: 14/01/2011, 17h10
  4. exécuter script/bach/commande sur machine distante
    Par bossun dans le forum VBScript
    Réponses: 1
    Dernier message: 20/01/2009, 18h24
  5. Problème sur les variables de class
    Par nico_pouchet dans le forum VB.NET
    Réponses: 6
    Dernier message: 11/06/2007, 16h51

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