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 les espaces des noms de fichier


Sujet :

Linux

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Points : 68
    Points
    68
    Par défaut Supprimer les espaces des noms de fichier
    Bonjour à tous,

    j'aimerais changer le nom d'un fichier sous Unix.

    Mon fichier s'appelle JEUX DE CARTES.txt et je voudrais le renommer JEUXDECARTES.txt

    En fait l'idéal serait de supprimer les espaces ou de les remplacer par le caractère _

    je sais que pour ignorer les espaces il faut mettre le nom entre guillemets, par exemple :

    mais je ne connais pas la commande pour modifier le nom.

    Ceci n'est que la partie visible de l'iceberg, ce que je veux vraiment faire c'est supprimer tous les espaces des noms des fichiers situés dans un répertoire "JEUX"...sans pour autant connaître le nom de ces fichiers.

    J'espère que je suis suffisamment claire.

    Merci pour votre aide.

    Bisous.Cat

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    La commande miracle pour remplacer un caractere, c'est tr (man tr pour plus d'info).

    Il faut que ca soit recursif ?
    De tete, ca devrait etre comme ca (code pas teste):
    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
    #! /bin/bash
    # Le "*" ne traite pas les fichiers commencant par un point
    for FICHIER in *
    do
        # on traite d'abord les dossiers recursivement
        if [ -d $FICHIER ]
        then
            cd $FICHIER && pwd && $0 && cd ..
        fi
        NOUVEAU_FICHIER=`echo $FICHIER | tr "\ " "_"`
        # pour test
        echo $FICHIER -> $NOUVEAU_FICHIER
        # au final... le -i sert a eviter d'ecraser u fichier existant
        #mv -i $FICHIER $NOUVEAU_FICHIER
    done

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    lut !

    Sinon pour etre plus radicale tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cp JEUX\ DE\ CARTE.txt JEUXDECARTE.txt; rm JEUX\ DE\ CARTE.txt
    Tu peux utiliser les tabulations pour completer le nom de tes fichiers ca aide souvent, ca enerve le reste du temps (BIP).

    Autre chose, avant de faire verifie que le fichier a bien ete copié ca serait dommage de tout perdre.

    bibi_64

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    Ceci n'est que la partie visible de l'iceberg, ce que je veux vraiment faire c'est supprimer tous les espaces des noms des fichiers situés dans un répertoire "JEUX"...sans pour autant connaître le nom de ces fichiers.
    Sinon pour etre plus radicale tu fais:
    Code:
    cp JEUX\ DE\ CARTE.txt JEUXDECARTE.txt; rm JEUX\ DE\ CARTE.txt


    Tu peux utiliser les tabulations pour completer le nom de tes fichiers ca aide souvent, ca enerve le reste du temps (BIP).
    Tu ne répond pas à sa problématique.

  5. #5
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Simplement :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IFS=$'\n' 
    for fichier in * 
    do 
    mv $file ${file// /_}
    done

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par becket
    J'aurais du m'en douter, bash a une substitution integree...

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Points : 68
    Points
    68
    Par défaut
    oui mais par contre il me met 'Bad substitution' pour :

    est-ce qu'en fait je dois remplacer file par un nom? dans mon exemple avec 'JEUX DE TAROT.txt' ça donne vraiment ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IFS=$'\n' 
    for fichier in * 
    do 
    mv $file ${file// /_} 
    done
    ou faut-il que je l'adapte à mes noms de répertoire et/ou fichiers ??

    dsl mais je suis débutante

  8. #8
    Membre confirmé
    Avatar de bster
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2005
    Messages : 372
    Points : 497
    Points
    497
    Par défaut
    la solution simple qui marche vraiment que ce soit sur linux unix et bsd !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >ls
    ti ti           to ti.txt             tu to.txt
    >for i in "*\ *.txt" ; do mv $i `echo $i | sed -e "s/ //g"` ; done
    >ls
    ti ti           toti.txt              tuto.txt
    >
    Comité de lutte contre le langage SMS sur les forums
    Veuillez écrire dans un langage compréhensible par les humains, merci.

  9. #9
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par Cathy
    oui mais par contre il me met 'Bad substitution' pour :

    C'est tres probablement parce que tu n'utilises pas le meme shell. Cette commande marche avec bash, mais je viens d'essayer, j'ai le meme message d'erreur que toi avec ksh. La solution que j'ai donnee plus haut devrait marcher aussi sous ksh. Enregistre mon code sous un fichier "renomme.sh" (par exemple, dans le meme dossier que tu veux modifier). Sous la console, place-toi dans le dossier et fait un pour le rendre executable. Tu peux ensuite taper pour le lancer depuis le meme dossier. Il ne modifiera pas tes fichiers, mais affichera simplement les modifications qu'il effectuerait.

    Si tu as un message d'erreur "bad interpreter" ou "file not found", tente de remplacer la premiere ligne parEDIT: mais mon code n'est vraiment utile que si tu veux faire recursivement... Sinon la solution de bster est tout aussi efficace...

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Points : 68
    Points
    68
    Par défaut
    oui mais bster est-ce que là je risque pas de faire la modif pour tous les fichiers (même ceux des autres répertoires) en faisant ça :

    est-ce que je dois pas plutôt faire un truc dans ce genre :


    ???

  11. #11
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Points : 68
    Points
    68
    Par défaut
    Alveric qu'est-ce que tu entends par "récursif" ??

    Ce code doit me servir chaque fois qu'un nouveau fichier arrivera sur ce répertoire et que le process sera lancé en fait.

  12. #12
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par Cathy
    Alveric qu'est-ce que tu entends par "récursif" ??
    Il descendra dans chaque sous-dossier, renommera les fichiers dedans si besoin, renommera ensuite le dossier si besoin, puis passera au suivant.
    EDIT:oups, mal lu... pas reveille, ce matin.
    Citation Envoyé par Cathy
    Ce code doit me servir chaque fois qu'un nouveau fichier arrivera sur ce répertoire et que le process sera lancé en fait.
    Tu peux le lancer manuellement a chaque fois ou le configurer pour etre lance regulierement par cron. Si tu veux qu'il soit execute seulement a des moments precis dependant d'un autre processus, alors il faudra le modifier...

  13. #13
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Points : 68
    Points
    68
    Par défaut
    ok donc ça ne risque pas de remonter dans les dossiers au-dessus du dossier dans lequel je me trouve, à savoir le dossier "JEUX", mais seulement d'aller dans les sous-dossiers comme tu dis.

    par contre j'ai créé mon renomme.sh, je l'ai mis dans le dossier "JEUX", j'ai fais :

    ok, très bien jusqu'ici...mais quand je fais :

    ça me met :

    ksh: ./renomme.sh : not found
    Alors que quand je fais j'ai bien le fichier qui apparaît

    ???

  14. #14
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Points : 68
    Points
    68
    Par défaut
    ah ok désolé j'avais oublié qu'il fallait remplacer la 1ère ligne...

    ...ça marche !!

    Génial merci beaucoup !!

    Bisous à tous

  15. #15
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par Cathy
    ok, très bien jusqu'ici...mais quand je fais :
    ça me met :
    ksh: ./renomme.sh : not found
    Comme j'ai dit plus haut, change la premiere ligne en Si ca marche toujours pas, remplace sh par ksh.

  16. #16
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Points : 68
    Points
    68
    Par défaut
    Hey sinon je voulais savoir comment supprimer l'ancien fichier (celui avec les espaces) une fois que le nouveau a été créé...sachant que je ne suis pas censée connaître son nom.

    Pour l'instant j'ai fait :

    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
     
    #! /bin/sh 
    # Le "*" ne traite pas les fichiers commencant par un point 
    for FICHIER in * 
    do 
        # on traite d'abord les dossiers recursivement 
        if [ -d $FICHIER ] 
        then 
            cd $FICHIER && pwd && $0 && cd .. 
        fi 
        NOUVEAU_FICHIER=`echo $FICHIER | tr "\ " "_"` 
        # pour test 
        echo $FICHIER -> $NOUVEAU_FICHIER 
        # au final... le -i sert a eviter d'ecraser u fichier existant 
        #mv -i $FICHIER $NOUVEAU_FICHIER 
    done
    Suivi de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chmod +x renomme.sh
    ./renomme.sh
    j'aimerais supprimer le ou les fichiers qui ont nécessité la transformation et qui sont donc en copie avec le nouveau nom !!
    Il faudrait le faire dans la boucle mais je n'y arrive pas

    Est-ce que quelqu'un peut m'aider svp ?

  17. #17
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Oups, j'ai bouletise, desole. J'aurais du relire mon code. Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        # pour test 
        echo $FICHIER -> $NOUVEAU_FICHIER
    c'aurait du etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        # pour test 
        echo "$FICHIER -> $NOUVEAU_FICHIER"
    Les nouveaux fichiers crees avec l'ancienne version ne sont PAS les copies des premiers. Le "echo" etait juste cense afficher le nom d'origine et le nouveau nom du fichier,mais a cause du caractere > qui n'etait pas protege ca a cree un ficheir de nom $NOUVEAU_FICHIER a la place.
    Rajoute les guillemets si tu veux voir les renommages que propose le script. Si lesrenommages sont bien ceux que tu veux, tu peux enlever la ligne avec le "echo" et enlever le # de la ligne ave "mv".
    Le code qui deplace effectivement les fichiers est celui-la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #! /bin/sh
    # Le "*" ne traite pas les fichiers commencant par un point
    for FICHIER in *
    do
        # on traite d'abord les dossiers recursivement
        if [ -d $FICHIER ]
        then
            cd $FICHIER && pwd && $0 && cd ..
        fi
        NOUVEAU_FICHIER=`echo $FICHIER | tr "\ " "_"`  
        mv -i $FICHIER $NOUVEAU_FICHIER
    done
    Desole pour l'erreur.

  18. #18
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Points : 68
    Points
    68
    Par défaut
    par contre excuse moi mais j'ai l'impression qu'en faisant ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mv -i $FICHIER $NOUVEAU_FICHIER
    ça me remodifie le nom et du coup j'ai à nouveau le nom de fichier avec les espaces mais pour mon nouveau fichier


  19. #19
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Bon, ok, maintenant j'ai verifie mon code... Le script:
    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
    #! /bin/sh
    for FICHIER in *
    do
        # on traite d'abord les dossiers recursivement
        if [ -d "$FICHIER" ]
        then
            cd "$FICHIER" && pwd && $0 && cd ..
        fi
        NOUVEAU_FICHIER=`echo $FICHIER | tr "\ " "_"`
        # on n'essaye pas d'ecrire sur un fichier existant
        if [ "$FICHIER" != "$NOUVEAU_FICHIER" ]
        then
            mv -i "$FICHIER" "$NOUVEAU_FICHIER"
        fi
    done
    Pour qu'il puisse s'appeler lui-meme en redescendant dans les sous-dossiers, je l'ai place dans un dossier /home/alveric/bin, et ce dossier fait partie de ma variable d'environnement PATH. Si tu as besoin que ca rentre dans les sous-dossiers (ou si tu veux l'appeler de n'importe ou), il faudra faire une chose similaire.

    Le contenu de mon dossier de test au depart
    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
    $ ll -R
    .:
    total 34
    -rw-rw-r--  1 alveric alveric    0 Aug  4 14:58 abc
    -rw-rw-r--  1 alveric alveric    0 Aug  4 14:58 a b c
    drwxrwxr-x  2 alveric alveric 5120 Aug  4  2005 dossier1
    drwxrwxr-x  2 alveric alveric 1024 Aug  4 14:58 dossier 2
     
    ./dossier1:
    total 0
    -rw-rw-r--  1 alveric alveric 0 Aug  4 14:58 cde
    -rw-rw-r--  1 alveric alveric 0 Aug  4 14:58 e f g
     
    ./dossier 2:
    total 0
    J'execute le script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [$ essai.sh
    /home/acarrio/tmp/test/dossier1
    /home/acarrio/tmp/test/dossier 2
    Mon dossier contient maintenant des fichiers et dossiers sans espaces.
    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
    $ ll -R
    .:
    total 34
    -rw-rw-r--  1 alveric alveric    0 Aug  4 14:58 abc
    -rw-rw-r--  1 alveric alveric    0 Aug  4 14:58 a_b_c
    drwxrwxr-x  2 alveric alveric 5120 Aug  4  2005 dossier1
    drwxrwxr-x  2 alveric alveric 1024 Aug  4 14:58 dossier_2
     
    ./dossier1:
    total 0
    -rw-rw-r--  1 alveric alveric 0 Aug  4 14:58 cde
    -rw-rw-r--  1 alveric alveric 0 Aug  4 14:58 e_f_g
     
    ./dossier_2:
    total 0
    Encore desole pour le code qui marche pas...

  20. #20
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Points : 68
    Points
    68
    Par défaut
    T'inquiète sans toi j'y serais encore dessus pendant 3 jours !!

    Hey ça marche...excellent !!



    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème pour supprimer les caractères spéciaux des noms de fichiers
    Par Steph84563 dans le forum Shell et commandes POSIX
    Réponses: 0
    Dernier message: 15/04/2014, 10h28
  2. [RegEx] Supprimer les caractères spéciaux des noms de fichiers
    Par Steph84563 dans le forum Langage
    Réponses: 4
    Dernier message: 11/04/2014, 14h51
  3. supprimer les espaces d'un nom de fichier
    Par Joey5 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 07/11/2008, 11h56
  4. Réponses: 7
    Dernier message: 20/10/2008, 11h49
  5. Réponses: 1
    Dernier message: 12/12/2006, 18h31

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