Que diriez-vous:
for file in *.php3
do
sed 's/\.php3/.php/g' $file > ${file%3}
done
Le pour/do/fait en boucle avec traite chaque fichier .php3 à son tour, la modification du fichier et le remplacement de chaque chaîne .php3
avec .php
, et la copie du fichier de something.php3 à something.php.
Ajouté pour la question modifiée:
for file in $(find . -type f -name '*.php3' -print)
do
sed 's/\.php3/.php/g' $file > ${file%3}
done
Le « -print
» peut être omis ces jours-ci, mais historiquement, beaucoup de temps de la machine a été gaspillée par des gens qui ont oublié de l'ajouter parce qu'il y avait à l'origine (pré-POSIX) aucune action par défaut.
Ce fragment est la modification la plus simple du code original pour faire la tâche étendue, mais ce n'est pas nécessairement la meilleure façon de le faire - il pré-génère la liste entière des fichiers avant d'en traiter. Vous pouvez utiliser à la place:
find . -type f -name '*.php3' -print |
while read file
do
sed 's/\.php3/.php/g' $file > ${file%3}
done
Cependant, les versions modifiées peuvent rencontrer des problèmes si les noms de fichiers ou des chemins d'accès peuvent contenir des espaces ou des sauts de ligne ou d'autres caractères. Pour éviter de tels problèmes, vous devez travailler plus dur - en utilisant Perl ou (GNU find + xargs) ou d'autres techniques. Si vous êtes sain d'esprit, vous évitez de tels problèmes. Si vous avez hérité d'une configuration moins que entièrement saine, vous devrez peut-être vous plonger plus profondément dans l'arcana de la gestion des noms de fichiers Unix.
Komodo a une fonction pour le faire. –