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 :

Un prog en bourne shell


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
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Par défaut Un prog en bourne shell
    Bonjour à tous,
    Mon problème n'a pas trop sa place sur ce forum, car c'est un programme en script shell que je souhaite réaliser.
    Pour me placer dans le contexte, je suis une formation à distance de programmeur et pour l'un des devoir que je dois rendre, il m'est demandé d'écrire en Bourne shell.

    La Question qui m'est demandée est la suivante: Écrire un programme en Bourne shell qui rangera dans le répertoire courant les fichiers en fonction de leur extension. Le programme créera les dossiers qui porteront le nom de l’extension du fichier.
    par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ls
    tuc1.c truc2.c cherche.pas dossier
    on lance notre programme et celui-ci range tout bien
    J'ai déjà creusé un peu la question, j'ai quelques pistes mais rien de bien concret. Si l'un d'entre vous pouvais me venir en aide, je lui serai très reconnaissant.

    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Par défaut
    Les Quelques pistes que j'explore sont une boucle for, demande l'arborescence du répertoire courant. Le programme doit récupérer le nom des extension des fichiers, et créer à l'aide d'un bon vieux mkdir les répertoires portant le nom de l'extension de fichier. Ces-dernier qui devront être déplacé dans ceux-ci. grace a un mv *.ext ./ext
    Voilà j'ai quelques commandes de base, Mais je ne vois pas trop comment syntaxer tout ça.
    J'ai penser à un piège qui pourrait exister:
    - Création du répertoire alors qu'il existe déjà et par conséquent, suppression du fichier qui était dedans.
    Merci de votre aide



    j'ai récupéré ce script que j'ai bidouillé et qui marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for i in /home/user/Dropbox/EDUCATEL/PRATIQUE_UNIX\/dev4/;
        do
          test ${i##*.} = 'sql'
          then
            do_truc()
        mkdir 'sql'
          elif test ${i##*.} = 'gnagna'
            do_machin()
        mv *.gnagna 'sql'
          fi
        done

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

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

    Création du répertoire alors qu'il existe déjà et par conséquent, suppression du fichier qui était dedans.
    non, si le répertoire existe déjà, cela affichera une erreur, et cela ne fera rien.

    Tu pourrais nous exposer clairement ton algorithme.

    et, lis un tuto (notamment celui indiqué dans ma signature, pour commencer), au lieu d'essayer de repiquer des scripts récupérés à droite à gauche.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Par défaut
    Merci pour ces liens, qui vont m'être fort instructifs je pense. Du coup en effet je reprends mon problème au départ et je pars d'un Algorithme. Je travaille dessus
    La suite à venir...

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Par défaut
    J'ai avancé un peu sur mon problème,
    j'ai trouvé la commande pour récupérer l'extension des fichiers dans le répertoire courant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ls -C | sed 's/.*\.//g'
    Mon hic maintenant, Je n'arrive pas à stocker le résultat obtenu dans une autre variable. Comment faire ? Faut-il un pipe ?
    J'ai besoin des caractères de l'extension afin de créer un répertoire du même nom.
    Merci à tous, bon début de semaine

  6. #6
    Membre chevronné Avatar de Mandraxx
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2011
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 182
    Par défaut
    Bonjour,

    Je pense que lister les fichiers est un peu plus délicat dans le sens où ta commande va aussi lister les dossier que tu pourrais avoir créé avec une précédente instance.

    Ensuite reste le problème des fichiers qui n'ont pas d'extension car cette information reste optionnelle.

    Je te conseille donc plutôt la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ls -l | grep ^- | awk '{print $9}' | grep '\.' |  sed 's/.*\.//g'
    Traduction : je liste en format long pour avoir un max d'infos, le premier grep me permet de sélectionner uniquement les entrées commençant par '-' (fichiers conventionnels) puis le awk transforme le flux en n'extrayant que la colonne 9 (nom du fichier); là dessus, le second grep exclut tout fichier qui ne comporte pas de '.' dans son nom => pas d'extension et enfin, on applique ton sed pour ne récupérer que l'extension.

    Après pour répondre plus directement à ta question : pour exploiter le résultat de cette commande, il faut l'affecter à une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EXTENSIONS=$(ls -l | grep ^- | awk '{print $9}' | grep '\.' |  sed 's/.*\.//g')
    Dans les tutos fournis par N_BaH, tu trouveras ensuite comment faire un for in do done

    @+

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

Discussions similaires

  1. bourne shell init de tableau
    Par pcouas dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 08/09/2011, 22h00
  2. bourne shell ajout d'argument depuis le shell à ceux reçus en entrée
    Par pcouas dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 07/09/2011, 08h08
  3. tester l'existence d'une variable en bourne SHELL
    Par nicolas.pailheret dans le forum Linux
    Réponses: 1
    Dernier message: 14/04/2009, 17h28
  4. Code en bourne shell du jeu Le "PENDU"
    Par piment dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 20/07/2007, 14h17
  5. Fonction until en bourne shell
    Par alexp dans le forum Linux
    Réponses: 4
    Dernier message: 05/07/2006, 10h43

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