Forum Clubic

[script] Automatiser reconversion nbx fichiers - while fichier; do action; done

Slt,

Siouplait je cherche un modèle de script BASH répétant une commande sur chaque fichiers d’un répertoire

Situation :

  • Quelques centaines de fichiers encodés en charsets variés, à passer en UTF-8.
  • j’ai enfin trouvé la livrairie qui analyse et convertit à merveille : utrac
  • Je suis un désastre en Algo :ane:

La commande manuelle est :

utrac /repertoire/fichier /repertoire/fichier_utf8

[EDIT]
Ce bout de script fonctionne…

#!/bin/bash

utrac=~/src/bin/utrac

cd "$1"
for filename in *.php
do
        $utrac "$filename" >"${filename%.php}.utf8"
done
exit 0

…enfin il crée un [fichier.utf8] en UTF-8 avec fin de ligne LF pour chq occurrence de *.php :slight_smile:

Savez-vous comment l’améliorer un peu pour :

  1. Renommer tous les fichiers en [fichier.extension.old]
  2. lancer utrac sur ces derniers en écrivant les fichiers convertis sous la forme [fichier.extension] ?

Si vous avez un petit exemple de script s’approchant dans un coin de votre dur ou bookmarks… :smiley:

for i in *.php
do
mv $i $i.old
utrac $i.old > $i
done

? :smiley:

rouch > je suis parti sur une variante issue d’un script de réencodage en ogg

#!/bin/bash
# conversion du charset vers celui par défaut du système
# et renommer avec la bonne extension direct, ici pour les feuilles de style css : 

utrac=~/src/bin/utrac

cd "$1"
for filename in *.css
do
    mv "$filename" "${filename}.old"
    $utrac "${filename}.old" >"${filename%.css}.css"
done
exit 0

Plus de 100 fichiers convertis puis uplodés vers le site, en 30’. C mieux :slight_smile:
Manque le choix de l’extension en entrée, et l’action récursive dans n répertoires :??:

for filename in $(find . -name "*.css") = recursif :slight_smile:

for filename in $(find . -name “*.$1”) = (execution : ./script css) recursif et selection de l’extension sur la ligne de commande :slight_smile:

lithium, tu pourrais encore utiliser plus les fonctionnalités de find avec -exec

find . -iname “*.$1” -exec /path/to/script ‘{}’ \;

[:shy]