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

Shell et commandes GNU Discussion :

Passer des répertoires et sous répertoire de minuscules en majuscules


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 94
    Par défaut Passer des répertoires et sous répertoire de minuscules en majuscules
    Bonjour à tous

    J'ai un répertoire contenant de nombreux répertoires, eux-mêmes contenant d'autres nombreux sous-répertoire.
    Certains sont en majuscules, d'autres en minuscules, d'autres un peu des 2....
    Ce que j'aimerai, c'est renommé tout les répertoires et sous-répertoire du répertoire d'origine en majuscule.
    Je me doute que je dois faire une boucle pour rechercher tout les répertoires puis de les renommer après avoir appliquer un tr dessus mais mon souci c'est que je ne dois pas m'y prendre dans le bon sens car après avoir renommé les 1er répertoires, il ne retrouve plus les sous-répertoires de ces répertoires....logique ils ont déjà changé de nom....

    Exemple :
    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
    tata@toto:/rep/reptest> find . -type d
    .
    ./TEST2
    ./TEST2/TEST
    ./TEST2/TEST/TEst1
    ./TEST2/TEST/TEst2
    ./TEST2/TEST1
    ./TEST2/TEST1/tesT1
    ./TEST2/TEST1/Test2
    ./TEST2/TEST2
    ./test
    ./test/test1
    ./test/tesT2
    ./test/TEST3
    ./tesT1
    ./tesT1/test
    ./tesT1/test2
    ./tesT1/teSt3
    tata@toto:/rep/reptest> 
     
    tata@toto:/rep/reptest> ./sar.sh 
    mv: `.' et `./.' identifient le même fichier.
    mv: ne peut écraser le répertoire `./TEST2/TEST2'
    mv: ne peut déplacer `./TEST2/TEST' vers un sous-répertoire de lui-même `./TEST2/TEST/TEST'
    mv: ne peut déplacer `./TEST2/TEST1' vers un sous-répertoire de lui-même `./TEST2/TEST1/TEST1'
    mv: ne peut déplacer `./TEST2/TEST2' vers un sous-répertoire de lui-même `./TEST2/TEST2/TEST2'
    mv: ne peut évaluer `./test/test1': Aucun fichier ou répertoire de ce type
    mv: ne peut évaluer `./test/tesT2': Aucun fichier ou répertoire de ce type
    mv: ne peut évaluer `./test/TEST3': Aucun fichier ou répertoire de ce type
    mv: ne peut évaluer `./tesT1/test': Aucun fichier ou répertoire de ce type
    mv: ne peut évaluer `./tesT1/test2': Aucun fichier ou répertoire de ce type
    mv: ne peut évaluer `./tesT1/teSt3': Aucun fichier ou répertoire de ce type
    tata@toto:/rep/reptest> ll
    total 72
    drwxr-xr-x   5 tata tata    72 2010-02-25 14:04 .
    drwxr-xr-x  10 tata tata    4096 2010-02-25 13:45 ..
    -rwxr-xr-x   1 tata tata    93 2010-02-25 13:45 sar.sh
    drwxr-xr-x   5 tata tata    42 2010-02-25 13:49 TEST
    drwxr-xr-x   5 tata tata    41 2010-02-25 13:48 TEST1
    drwxr-xr-x   5 tata tata    41 2010-02-25 13:49 TEST2
    tata@toto:/rep/reptest>
    Mon code actuel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for each in `find . -type d`
    do
    newname=`echo $each | tr [a-z] [A-Z]`
    mv $each $newname
    done
    Comment je peux m'y prendre ?

    Merci de votre aide !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 691
    Par défaut
    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
    #/bin/bash
     
    reName() {
       for each in "$1"/*
       do [ -d "$each" ] && {
             dir="$each"
             new=$(ChangeCase "$dir")
             path="${dir%/*}"
             echo -e "\e[00;32m$dir\e[00m -> \e[00;36m$path/$new\e[00m"
             mv "$dir" "$path/$new"
             reName "$path/$new"
          }
       done
    }
     
    getopts ul option
    case $option in
       u) ChangeCase() { tr [a-z] [A-Z] <<<"${1##*/}"; }
       ;;
       l) ChangeCase() { tr [A-Z] [a-z] <<<"${1##*/}"; }
       ;;
       *) echo "il faut indiquer une option\n\t-u mettre en majuscule\n\t-l mettre en minuscule"
          exit
       ;;
    esac
    shift #$(($OPTIND - 1))
    reName "${1:-.}"
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre émérite 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 : 62
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Une solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
     
    for dir in $(find ${1:-.} -type d | awk -F '/' '{print NF, $0}' | sort -nr -k 1,1 | awk '{print $2}')
    do
      newDir=$(echo $dir | awk 'BEGIN {FS=OFS="/"} {$NF=toupper($NF); print}')
      [[ $newDir != $dir ]] && mv $dir $newDir
    done
    Si on passe un argument au script, c'est le répertoire à partir duquel il faut faire les modifications. Si pas d'argument, c'est le répertoire courant.

  4. #4
    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 : 57
    Localisation : France

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

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

    Je vais encore mettre mon grain de sel dans vos jolies boucles de programmes.

    Mais la commande rename permet cela (à intégrer dans une boucle bien sûr).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rename "y/[A-Z]/[a-z]/" <ce_que_tu_veux_renommer>
    @jmelyn et N_BaH : pourquoi faire simple quand on peut faire compliquer hein
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  5. #5
    Membre émérite 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 : 62
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    As-tu essayé, winnt?

    Exemple:
    dir1/dir2/dir3 --> dir1/dir2/DIR3

    On ne change qu'un seul nom de répertoire à la fois dans les sous-répertoires sinon...

  6. #6
    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 : 57
    Localisation : France

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

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

    Le problème de amans m'ayant intéressé je me suis penché dessus à faire un petit script (largement perfectible) afin de récupérer la liste des répertoires (et ceci sans awk ).

    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
    #!/bin/bash
    #
    # le programme prend en paramêtre un répertoire
    #
    # But du script : lister récursivement les répertoires à partir d'un répertoire donné en paramêtre
    #
    cyan="\e[1;36m"
    blanc="\e[1;37m"
    function liste_repertoire
    {
    #local repertoire
    for i in $(ls -1F $1 | grep ".*/$")
    do
    repertoire=$1"$i"
    	if [[ -d $repertoire ]]
    		then
    			echo -e $cyan"Répertoire : "$blanc"$repertoire"
    			cd $repertoire
    			liste_repertoire $repertoire
    	else
    		echo -e $cyan"Répertoire : "$blanc"$repertoire"
    	fi
    done
     
    }
     
     
    if [[ -d $1 ]]
    	then
    		liste_repertoire $1"/"
    elif [[ -z $1 ]]
    	then
    		echo "Aucun répertoire saisi."
    		echo "Fin du programme"
    		exit
    else
    	echo $1" n'est pas un répertoire."
    	echo "Fin du programme."
    	exit
    fi
    Il manque pas mal de choses pour qu'il soit fini mais....
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

Discussions similaires

  1. Compil des sources en sous-répertoire d'un projet
    Par Chavadam dans le forum Visual Studio
    Réponses: 0
    Dernier message: 20/05/2010, 12h52
  2. Réponses: 2
    Dernier message: 24/10/2007, 16h57
  3. Comptage des sous-répertoires d'un répertoire
    Par GBAGO dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/09/2007, 16h11
  4. Taille des répertoires et sous répertoires
    Par Katyucha dans le forum Windows XP
    Réponses: 4
    Dernier message: 24/08/2006, 17h28
  5. Lecture des répertoires et sous répertoire en php
    Par BRAUKRIS dans le forum Langage
    Réponses: 1
    Dernier message: 30/03/2006, 18h27

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