Batch Perl Replace - Perl - Programmation
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+,
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
Message édité par grosbin le 20-01-2011 à 18:05:44
---------------
Photos Panoramiques Montagnes Haute Savoie