En gros, j'ai 100 fichiers avec des liens en .htm ou .html, je veux tout renommer : les fichiers et les liens dans les fichiers.
Quelqu'un a une idée ?
Pour renommer les fichiers, j'ai :
ls -d *.htm | sed 's/\(.*\).htm$/mv "&" "\1.php"/' | sh
mais pour le contenu des fichiers, je trouve pas.
Merci d'avance
# rename
Posté par bergamote23 . Évalué à 2.
Pour les liens, j'aurais surement fait en perl, mais je pense que c'est possible encore plus simplement en sed.
un truc du genre:
for i in *.htm; cat $i | sed -e 's/htm/php/g' > $i
devrait pas etre loin de fonctionner...
Sinon, google a également plein de solution pour ce problème.
[^] # Re: rename
Posté par Antoine Reilles (site web personnel) . Évalué à 1.
find . -name "*.htm" |xargs perl -i.bak -p -e 's/searchstr/replacestr/g';
pour ce que tu veux faire,
find . -name "*.htm" | xargs -i {} sed 's/htm/html/g' {} > {}l
devrait faire l'affaire, une fois les bugs enlevés.
Sinon, il y a un un machin appelé "deep" qui est plus simple a utiliser, mais je retrouve plus l'url
PS: tiens, on firait qu'il y a une version gnu de xargs qui connait -i, le xargs bsd n'a pas l'air de connaitre
[^] # NON NON ET NON!!! DANGER : cat $i | sed -e 's/htm/php/g' > $i
Posté par Raphaël G. (site web personnel) . Évalué à 1.
la bonne commande serais (en bash):
for i in *.htm; do cat $i | sed -e 's/htm/php/g' > $i.new && mv -f $i.new $i; done
Sinon y a moyen de faire pareil avec perl :
for i in *.htm; do perl -pe "s/htm/php/g" -i $i; done
[^] # Re: NON NON ET NON!!! DANGER : cat $i | sed -e 's/htm/php/g' > $i
Posté par gc (site web personnel) . Évalué à 3.
for i in *.htm; do perl -pe "s/htm/php/g" -i $i; done
Ou la même chose en une seule commande :
perl -pi -e 's/\.htm/.php/g' *.htm
[^] # ARRETEZ AVEC VOS CAT | SED
Posté par totof2000 . Évalué à 2.
for i in *.htm; do sed -e 's/htm/php/g' $i > $i.new && mv -f $i.new $i; done
Vous ne seriez pas du genre a faire un cat toto | more?
[^] # je confirme: NE SURTOUT PAS FAIRE CA !
Posté par B. franck . Évalué à 1.
hum... voyons voir...
je pense que cette ligne remplace toutes les occurences de la chaîne 'htm' par 'php',
dans toutes les lignes, de tout le contenu de tous les fichiers *.htm
ça m'a tout l'air d'être un beau "ratiboisage" en bon et dûe forme
sans aucun changement des noms de fichier...
par contre un
for i in $(ls *.htm); do echo mv -i $i $(echo $i | sed -e 's/\.htm$/\.php/i') ; done
"ne devrait pas être loin" de marcher (en fait ça marche :] )
en supposant que les noms de fichier ne contiennent pas d'espace (je n'ai pas testé en fait, les espaces dans les noms de fichier sont une hérésie) et que l'on pipe le résultat dans un shell car on ne fait qu'afficher les commandes pour éviter les "catas". ( | /bin/sh )
[^] # je me réponds
Posté par B. franck . Évalué à 1.
# rename
Posté par B. franck . Évalué à 1.
et une petiti preuve:
frbn@mx:~/test$ touch html.htm_htm.htm
frbn@mx:~/test$ touch htmhtmhtm.htm.htm.htm
frbn@mx:~/test$ ll
total 0
-rw-r--r-- 1 frbn frbn 0 Apr 14 08:35 htmhtmhtm.htm.htm.htm
-rw-r--r-- 1 frbn frbn 0 Apr 14 08:35 html.htm_htm.htm
frbn@mx:~/test$ rename 's/\.htm$/\.php/' *.htm
frbn@mx:~/test$ ll
total 0
-rw-r--r-- 1 frbn frbn 0 Apr 14 08:35 htmhtmhtm.htm.htm.php
-rw-r--r-- 1 frbn frbn 0 Apr 14 08:35 html.htm_htm.php
the regexp paouwa
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.