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 :

Modifier les liens à l'intérieur des fichiers d'une applications php (Casse) en bash !


Sujet :

Linux

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 33
    Points : 17
    Points
    17
    Par défaut Modifier les liens à l'intérieur des fichiers d'une applications php (Casse) en bash !
    Bonjour à tous,

    J'ai une application php d'une taille d'environ 500 Mo.
    Mon but est de la migrer vers Linux. Ainsi je dois faire attention à la casse. Par exemple, un nom de fichier sera : "nom.php" et il sera appelé à l'intérieur d'un fichier de cette façon : "Nom.php", et d'un autre : "NOM.php". Je vais devoir les modifier pour qu'ils soient appelés de cette façon : "nom.php".

    J'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    # Je parcours mon dossier
    find . ! -name "." -print | while read fichier
    do
        # Pour chaque fichier, je récupère le nom du fichier
        nomFichier=`basename "$fichier"`;
        # Je modifie le nom du fichier dans la bonne casse
        find ./ -type f -exec sed -i "s/$nomFichier/$nomFichier/gI" {} \;
     
    done
    Le problème est que le script est beaucoup trop lent. 5 secondes sur un dossier de 10 Ko. Des heures et des heures, et toujours pas terminé sur un dossier de 12 Mo. On imagine sur 500 Mo ...

    Si vous avez une solution plus rapide, pouvez-vous me la communiquer s'il vous plait.

    Merci d'avance.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    avec bash4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash4
     
    shopt -s globstar
    declare -l y
    tableau=( ~/Rep/** )
     
    for i in "${tableau[@]}"
    do [ -f "$i" ] && {
          for Y in "${tableau [@]}"
          do y="$Y"
             sed -i "s/$Y/$y/g" "$i"
          done
       }
    done
    ...
    ?
    Je n'ai pas testé dans le détail...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 375
    Points : 23 634
    Points
    23 634
    Par défaut
    Ouille ! Tu fais un « find au carré » ! Ça risque effectivement d'être long. Si ta mémoire est assez grande (2 ou 3 gigas) pour tout contenir, ça peut encore passer. Mais si tu commences à swapper, tu en auras pour des mois :-) Je te conseille plutôt de générer dans un premier lieu un script sed contenant toutes les expressions à remplacer :

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > script.sed
    find . ! -name "." -print | while read i ;
    do
        fichier = `basename $i`
        echo "s/$i/$i/gi" >> script.sed
    done

    Puis d'appliquer ce script sur tous les fichiers qui le nécessitent (a priori, unqiuement les *.php) :

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name '*.php' -exec sed -if script.sed {} \;

    Tu feras au maximum 2n passes au lieu d'en faire .

    Attention toutefois avec ces substitutions automatiques. Il faut tenir compte du fait que le "." sera interprété comme un caractère quelconque par les expressions régulières et les motifs retrouvés − spécialement lorsqu'il s'agit de noms de répertoires − risquent de correspondre dans le code à des choses qui n'ont rien à voir avec des noms de fichier.

    Citation Envoyé par N_BaH Voir le message
    avec bash4 :[code]#!/bin/bash4


    Ça ne changerait rien. Le code est en bash mais le procédé reste le même.

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    J'ai une petite erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed: -e expression #1, char 10: unterminated 's' command
    Je ne vois pas pourquoi ...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    l'un des fichiers n'aurait-il pas un espace dans son nom ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "'s/$i/$i/gi'" >> script.sed
    ...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. JAR utilisé pour lire des fichiers par une application
    Par flow10000 dans le forum Entrée/Sortie
    Réponses: 22
    Dernier message: 12/05/2013, 22h54
  2. Peut-on modifier les droits d'accès des fichiers assets ?
    Par chinoismasque dans le forum Android
    Réponses: 13
    Dernier message: 27/05/2011, 10h59
  3. Distribuer des fichiers avec une application
    Par srvremi dans le forum Android
    Réponses: 5
    Dernier message: 26/01/2011, 16h40
  4. XML/XSL et gestion des fichiers dans une application Web
    Par fatenatwork dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 01/02/2008, 14h09
  5. |VB6] Comment Lister les liens vers des fichiers d'une page web
    Par Mayti4 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/01/2005, 18h17

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