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

Linux Discussion :

Shell script pour ajouter l'extension à des fichiers doc et pdf


Sujet :

Linux

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Shell script pour ajouter l'extension à des fichiers doc et pdf
    Bonjour à tous,
    voilà, je dois mettre au point un script shell qui ajouterait l'extension qui va bien à un grand nombre de fichiers doc et pdf. Et franchement, je ne connais rien à la programmation, je vis un réel cauchemar
    Si quelqu'un peut m'aider, ce serait vraiment magnifique !

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai tenté ceci :

    #!/bin/sh
    for i in `ls -l|awk '{print $8}'`
    do
    var=$(file $i |grep -i pdf|awk '{print $2}')
    if [ "$var" == "PDF" ]; then
    echo $var ;
    cp $i $i.pdf;
    else
    cp $i $i.doc;
    echo "pas bon";
    fi;

    done

    Mais il copie tous les fichiers en mettant l'extension .doc, ca n'a pas l'air de fonctionner pour les pdf.
    La commande file * |grep -i pdf|awk '{print $2}' me resort pourtant bien PDF. Bouh...

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Comment represent tes fichiers doc et pdf? Ils ont des formats bien precis?

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Raaah, ca marche, enfin on dirait, avec :
    -------------------------
    #!/bin/sh
    for i in `ls -l|awk '{print $8}'`
    do
    var=$(file $i |grep -i pdf|awk '{print $2}')
    if [ "$var" = "PDF" ]; then
    cp $i $i.pdf;
    else
    cp $i $i.doc;
    fi;

    done
    --------------------------

    Vous imaginez pas ma joie
    Merci tout de même

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Salut tu devrais essayer avec un seul '=' dans le if

    tu peux essayer de lancer tes scripts comme ça pour voir la trace d'execution ça aide a débugger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $> bash -x monscript.sh

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Tout à fait, le problème c'était les 2 =
    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 471
    Points
    19 471
    Par défaut
    Non, mais ça_a va_a pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    for i in *; do
       if [[ "$i" = *\.[pP][dD][fF]$ ]]; then
          cp $i $i.pdf
       else
           cp $i $i.doc
       fi
    done
    à moins d'être lié au Original Bourne Shell...

    de toute façon, on ne fait pas for item in $(ls) : c'est dégueu', ça oblige à des "circonvolutions" i nu tiles

  8. #8
    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 : 56
    Localisation : France

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

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

    Citation Envoyé par N_BaH
    de toute façon, on ne fait pas for item in $(ls) : c'est dégueu', ça oblige à des "circonvolutions" i nu tiles
    Je ne vois pas ce que tu veux dire. Tu pourrais expliciter s'il te plait (désolé mais j'aime bien comprendre ).

  9. #9
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Disons que Bash est le shell par défaut pour Linux. Donc autant utiliser toute sa puissance plutôt que de se restreindre au shell original. D'où:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    for fichier in ${1:-.}/*
    do
      case $(file $fichier | cut -d ' ' -f 2) in
        PDF) [[ $fichier =~ .pdf$ ]] || mv $fichier $fichier.pdf ;;
        CDF) [[ $fichier =~ .doc$ ]] || mv $fichier $fichier.doc ;;
        OpenDocument) [[ $fichier =~ .odt$ ]] || mv $fichier $fichier.odt ;;
      esac
    done
    Explications:

    • On peut, si on veut, mettre un argument au script: c'est le répertoire où faire le travail. Sinon c'est le répertoire courant.
    • Si l'extension existe déjà, elle n'est pas ajoutée.
    • J'ai ajouté le format odt pour avoir un format complètement libre...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 471
    Points
    19 471
    Par défaut
    Citation Envoyé par winnt
    Je ne vois pas ce que tu veux dire. Tu pourrais expliciter s'il te plait (désolé mais j'aime bien comprendre
    Il y a un tas de commandes externes que Bash exécute en interne (par lui même : builtins, PE..), donc faire appel à des comandes externes quand "bash le fait tout seul"*...

    *'y faut quand même écrire le code

  11. #11
    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 : 56
    Localisation : France

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

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

    Reprenez moi si je dis une bêtise.

    A ce que je comprends de ce fil si le fichier contient le terme PDF on lui ajoute l'extension pdf. Et s'il contient le terme DOC on lui ajoute l'extension doc.

    D'ailleurs la maxime préférée de jmelyn me semble des plus appropriée sur ce fil. Le problème n'ayant pas été des plus clairement exposé.

    Car à vos scripts je pense que la commande rename se substituerai très facilement.

    Mais je dis ca je dis rien.

  12. #12
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Salut Winnt ,

    Ce n'est pas tout a fait le cas , le type de fichier(Pdf , doc et ODT est déterminé par la commande "file" , qui retourne le type de fichier (pratique ).

Discussions similaires

  1. Shell script pour compter le nombre de fichiers par extension
    Par andress33 dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 30/03/2015, 01h26
  2. Script pour changer le nom des fichiers
    Par MR-SMOOT dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 30/08/2014, 16h26
  3. ajouter une extension à des fichiers sans extension
    Par biloux911 dans le forum VB.NET
    Réponses: 2
    Dernier message: 16/12/2010, 11h38
  4. [VBA-W] Ajouter les extensions des fichiers
    Par dev81 dans le forum VBA Word
    Réponses: 4
    Dernier message: 02/05/2007, 14h54
  5. script pour ajouter des utilisateurs postgres
    Par xopos dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 16/08/2004, 10h49

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