Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

script pour changer l'extension d'un ensemble de fichiers (unix)



  1. #1
    baobib

    Post script pour changer l'extension d'un ensemble de fichiers (unix)


    ------

    Bonjour

    je travaille sous unix et je voudrais écrire un script appelé rename permettant de changer l'extension d'un ensemble de fichiers (par exemple

    rename '.c' '.bak' aura pour effet de renommer tous les fichiers d'extension .c en .bak.)

    Je sais que pour ce script il faut utiliser la commande basename, mais à vrai dire, je ne sais pas trop comment l'utiliser. Mais j'essaie quand même..

    #!/bin/bash
    #je fais une boucle for
    for i in *
    do $i=basename file

    #si c'est un fichier on arrete la procedure
    if [ -d file ]; then break

    #sinon ou boucle infiniment
    else cd
    foreach file in *$i do
    mv $file `basename $file`
    done
    done


    je suis pas sûr du tout de ce script. S'il est faux pouvez-vous me le corriger ?

    merci d'avance

    -----

  2. #2
    Towl

    Re : script pour changer l'extension d'un ensemble de fichiers (unix)

    Un petit tour sur le man de basename indique ce que fait cette commande et comment elle fonctionne.
    Et on trouve le paragraphe :
    If the suffix operand is present, is not identical to the characters remaining in string, and is identical to a suffix of the characters remaining in string, the suffix suffix will be removed from string. Otherwise, string will not be modified by this step. It will not be considered an error if suffix is not found in string.
    Ce qui nous donne : si un opérateur suffixe est present, alors celui-ci est supprimé de la chaîne. S'il n'est pas présent, il n'y a pas d'erreur.
    Ce qui nous donne comme exemple :
    Code:
    towl ~$basename /toto/titi/tata.c .c
    tata
    Un man test nous apprend que [ -d file ] retourne vrai si file existe et est un repertoire. Problème dans ton commentaire

    Ensuite la syntaxe du if est fausse (man sh):
    Code:
    if COND
    then
        SI VRAI
    else
        SI FAUX
    fi
    Ensuite foreach ne semble pas exister en sh, un petit for serait du meilleur effet (man sh).

    Les variables sont précédé d'un $, sauf pour l'initialisation :
    Code:
    towl ~$ a="coucou"
    towl ~$ echo $a
    coucou
    towl ~$ echo a
    a
    Corrige deja ces erreurs la, regarde le résultat que cela te génére et essaye de comprendre pourquoi ton programme ne fonctionne pas forcément correctement

    Et pense à prendre l'habitude de poster entre les balises (code)(/code)
    The only limiting factor of the Linux operating system, is his user. - Linus Torvalds

Discussions similaires

  1. Unix: script affichant le nom de chaque fichier du répertoire dans lequel il est
    Par Sparta92 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 29/09/2008, 18h28
  2. un programme sous unix ( script shell )
    Par boy611 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 09/08/2008, 12h39
  3. Experimentation pour determiner centre de gravité d'un ensemble
    Par goodvibes69 dans le forum Technologies
    Réponses: 9
    Dernier message: 01/08/2008, 10h30
  4. Changer l'extension d'une video
    Par NLH-Cédric dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 13/07/2008, 09h01
  5. Lire des fichiers Post script sous vista
    Par ordage dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 05/06/2008, 06h47
Découvrez nos comparatifs produits sur l'informatique et les technologies.