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 :

Renommer des fichiers


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 Renommer des fichiers
    Bonjour,

    J'ai deux répertoires :

    et

    Dans ces répertoires j'ai des fichiers, exple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    U:\Jeux\Plateau\Jeu de dames.txt
    Et j'aimerais modifier ce nom de fichier pour avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    U:\Jeux\Plateau\Plateau_Jeu_de_dames.txt
    Cela revient à remplacer les espaces par des "_" et à renommer mes fichiers avec au début le nom du répertoire dans lequel il se trouve

    Il faut ensuite que j'enregistre ces noms de fichiers dans un fichier texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    U:\Sauvegarde\ListeJeux.txt
    Mon code est le suivant :

    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
     
    cd U:\Jeux\Plateau
     
    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" 31_10 && "$NOUVEAU_FICHIER" 
        fi
    done
    ls >../../Sauvegarde/ListeJeux.txt
     
    cd ../Cartes
    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
    ls >>../../Sauvegarde/ListeJeux.txt
    Ce que je vous demande dans un premier temps, c'est de me dire comment faire pour ne pas avoir à préciser les répertoires
    Cartes
    et
    Plateau
    et donc mettre mon code dans un boucle qui va regarder chaque répertoire présents dans ensuite j'arrive à remplacer les espaces par des soulignés mais pas à mettre le nom du répertoire au début du nom du fichier

    Merci d'avance pour votre aide, je suis perdue là !!


  2. #2
    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
    pour automatiser tous les repertoires dasn U:\Jeux, une boucle sur les repertoire dedans comme deja fait pour la recherche recursive.
    ou commancé par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    find U:\Jeux - type d > /tmp/liste_repertoire
    while read ligne
    do
    cd $ligne
    ....... ton script actuelle
    ...
    done </tmp/liste_repertoire
    pour la liste de fichier utilise la commande find :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find U:\Jeux -type f > ../../ta_sauvegarde
    la syntaxe U:\Jeux me surprend beaucoup ....... tu es sous windows ?[/code]
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  3. #3
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Salut

    Je te propose le script Perl suivant :
    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
     
    #!/usr/bin/perl -w
     
    use strict;
     
    sub mv {
    	opendir DIR, $_[0] or die "$!\n";
    	my @files = readdir DIR;
    	close DIR;
    	chdir($_[0]);
    	foreach my $file (@files){
    		chomp $file;
    		my $oldname = $file;
    		#La regexp suivante permet de modifier les espaces par le caractère _
    		$file=~s/\s/_/g;
    		rename($oldname, $file);
    	}	
    }
     
    print "Quel premier répertoire veux-tu modifier ?\n";
    my $rep1 = <stdin>;
    chomp $rep1;
    print "Quel deuxième répertoire veux-tu modifier ?\n";
    my $rep2 = <stdin>;
    chomp $rep2;
     
    #On va changer les noms des fichiers de $rep1 
    mv($rep1);
     
    #Pareil pour le 2ème répertoire
    mv($rep2);
    En gros, il te demandera les chemins absolus de tes 2 répertoires. Puis, la fonction mv (rien à voir avec la commande Unix !) prend le relais en modifiant les noms de tes fichiers avec des espaces changés en _.
    Je n'ai pas prévu de cas récurif dans ma fonction. Toutefois, ça doit se bricoler rapidement.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  4. #4
    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 merci beaucoup !!

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

Discussions similaires

  1. Renommer des fichiers contenant des espaces
    Par MatRem dans le forum Linux
    Réponses: 6
    Dernier message: 28/04/2006, 08h21
  2. Supprimer / Renommer des fichiers
    Par mick030118 dans le forum C
    Réponses: 2
    Dernier message: 18/03/2006, 18h24
  3. renommer des fichiers
    Par avantoux dans le forum Windows
    Réponses: 4
    Dernier message: 27/12/2005, 16h01
  4. [LG]programme qui renomme des fichiers
    Par Ne0taku dans le forum Langage
    Réponses: 9
    Dernier message: 16/02/2005, 21h18
  5. [] [Réseau] Renommer des fichiers dans un site FTP
    Par JerBi dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 22/08/2003, 00h35

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