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 :

Supprimer Blancs dans nom fichier (et ^M dans contenu fichier)


Sujet :

Linux

  1. #1
    Membre régulier Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Points : 88
    Points
    88
    Par défaut Supprimer Blancs dans nom fichier (et ^M dans contenu fichier)
    Bonjour à toutes et à tous.

    J'ai quelques questions concernant un code ksh que je suis en train d'écrire :
    Il supprime les blancs dans les noms de fichiers et de dossier et supprime les ^M dans les fichiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #!/usr/bin/ksh
    
    #
    # Supprimer les Blancs des noms de fichiers d'un dossier donne
    # Supprimer les ^M contenus dans les fichiers d'un dossier donne (fonction dos2Unix non dispo)
    #
    function FormatFic($DIR_SRC, $DIR_DEST)
    {
        for i in `ls $DIR_SRC`
        do
            if($i est un dossier) then
                mkdir $DIR_DEST/$i
                FormatFic($DIR_SRC/$i, $DIR_DEST/$i)
            else
                filename=`basename $i`
    
                if ! [ $filename -z ] then
                    nouveau_nom=`echo $filename | sed -e 's/ /_/'`
                    mv $DIR_SRC/$filename $DIR_SRC/$nouveau_nom
                    sed -e 's/^M//' $DIR_SRC/$nouveau_nom > $DIR_DST/$nouveau_nom
                fi
            fi
        done
    
        rm -rf $DIR_SRC
    }
    
    #
    # VARIABLES DE BASE
    #
    REP_SRC=$1
    REP_DEST=$2
    
    #
    # Operations preliminaires
    #
    rm -rf $REP_SRC
    tar xvf $REP_SRC".tar"
    rm -rf $REP_DEST
    mkdir $REP_DEST
    
    #
    # appel de la fonction
    #
    FormatFic($REP_SRC, $REP_DEST)
    Le truc c'est que je ne sais pas trop quelle est la commande à utiliser pour savoir si une ligne de ma boucle for est un dossier ou pas.

    Je ne suis pas sur non plus de ma syntaxe pour les paramètres de ma fonction. Est-ce bien comme cela qu'il faut faire ?

    Merci d'avance pour votre aide.

    Bahan
    Bats-toi de toutes tes forces tant que tu es en vie, et n'abandonne que quand tu es mort

  2. #2
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 119
    Points : 156
    Points
    156
    Par défaut
    Pas sur, c'est vieux pour moi, mais dans mes souvenirs, le format des fonctions est plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function toto
    {
    blabla
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    toto()
    {
    blabla
    }
    ou l'on joue avec $1, $2, etc pour avoir les parametres.
    M'enfin, il y a peut-etre plus "moderne", a voir dans le man. ;)

    Pour ce qui est de tester si c'est un directory :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if [ -d <variable> ]
    then 
      <fais ce que tu as a faire, c'est un directory>
    fi
    A+

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Suivant les distributions, tu as un script dos2unix (ou dos2linux suivant)
    Avec un coup de find, c'est réglé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find $REP -type f -exec dos2unix {} \;
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    Je te conseille de lire un tuto sur le Korn-shell, beaucoup de reponse y sont

    http://marcg.developpez.com/ksh/
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/05/2011, 20h36
  2. Nom de projet différent dans le package explorer et dans Tomcat
    Par Thibault.B dans le forum Eclipse Java
    Réponses: 15
    Dernier message: 29/07/2009, 13h41
  3. [batch] supprimer extension des noms de fichiers dans un texte
    Par mirage59 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 06/03/2009, 13h47
  4. Réponses: 5
    Dernier message: 29/05/2008, 12h23
  5. Réponses: 8
    Dernier message: 11/10/2007, 16h57

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