Batch Perl Replace

Batch Perl Replace - Perl - Programmation

Marsh Posté le 20-01-2011 à 18:05:25    

Bonjour, afin de remplacer des textes / contenus sur mon serveur, j'utilise cette expression

find . -type f -iname '*.php' -exec perl -pi -w -e 's/texte à remplacer/remplacement/g;' {} \;


Or cette dernière modifie les dates de modification des fichiers, ces dernières que je souhaiterais conserver, remettre à l'état initial après ce passage ..
Je ne sais pas non plus combiner avec grep afin de modifier uniquement les fichiers contenant l'expression ..
 
Là immédiatement cette syntaxe m'a modifié tous les timestamps des fichiers sur mon serveur .. cela m'a foutu le dawa dans ma gestion de cache ..
 
En résumé : je cherche à modifier cette syntaxe afin de s'attaquer qu'aux fichiers contenant l'expression, tout en conservant leurs timestamp
 
A vos suggestions merci  :jap:


Message édité par grosbin le 20-01-2011 à 18:05:44

---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 20-01-2011 à 18:05:25   

Reply

Marsh Posté le 20-01-2011 à 19:11:53    

Sous Unix/Linux, dans un script perl, il faut procéder ainsi:
1) Récupérer les valeurs courantes:  ($atime, $mtime) = (stat($filename))[8,9];
2) faire ses modifs dans le fichier
3) Remettre les valeurs avant modif: utime $atime, $mtime, $file or die "Error setting timestamp for $file: $!\n";
cette 3e partie ne marche pas sous Windows (j'ai pas testé, c'est peut être maintenant bon dans une version récente), il faut passer par des fonctionnalités spécifiques de Win32API::File::Time.
use Win32API::File::Time qw{:win};
1)  ($atime, $mtime, $ctime) = GetFileTime ($filename);
2) ...
3)  SetFileTime ($filename, $atime, $mtime, $ctime);

 

>je cherche à modifier cette syntaxe afin de s'attaquer qu'aux fichiers contenant l'expression
Comme tu dois obligatoirement en lire le contenu, l'accesstime est modifié, que le fichier soit modifié ou non et donc il faut le remettre comme plus indiqué.
A+,


Message édité par gilou le 20-01-2011 à 19:23:42

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed