2009-07-25 6 views
16

Je sais que je peux convertir un encodage de fichiers unique sous Mac OS X en utilisant:encodage de fichiers de changement osx (iconv) récursive

iconv -f ISO-8859-1 -t UTF-8 myfilename.xxx > myfilename-utf8.xxx

je dois convertir un tas de fichiers avec une extension spécifique, donc je veux pour convertir l'encodage de fichiers de l'ISO-8859-1 en UTF-8 pour tous les fichiers * .ext dans le dossier/mondisque/myfolder

savoir peut-être someobe la syntaxe comment faire cette

grâce

Ekke

Répondre

23

commentaire Adam m'a montré le chemin comment le résoudre, mais ce fut la seule syntaxe je l'ai fait travailler:

find /mydisk/myfolder -name \*.xxx -type f | \ 
    (while read file; do 
     iconv -f ISO-8859-1 -t UTF-8 "$file" > "${file%.xxx}-utf8.xxx"; 
    done); 

... -i -o ... ne marche pas le travail, mais>

thx à nouveau

Ekke

+1

Pour écraser les fichiers fondés '#!/Bin/bash find ./tmp -type f | \ (lors de la lecture du fichier; faire iconv -f windows-1251 -t UTF-8 "$ fichier" -o "$ fichier"; fait); ' – temni

+2

Merci. Je t'ai tellement aidé. J'ai fait ainsi '#!/Bin/bash trouver ./src -type f | \ (alors que le fichier de lecture, faire \t si [[ "$ file" = * .DS_Store *]!], Puis \t \t si [[ "$ file" = * -utf8 *]!], Puis \t \t \t iconv -f 1251 -t UTF-8 "$ fichier"> "$ fichier UTF8"; \t \t \t rm fichier $; \t \t \t mv "fichier-utf8 $" "$ file"; \t \t fi Done (\t done); ' –

0

Vous pouvez écrire un script dans un langage de script pour itérer sur tous les fichiers dans/mondisque/myfolder, vérifiez l'extension avec le regex [. (. *) $], Et si elle est "poste" , exécutez ce qui suit (ou équivalent) à partir d'un appel système.

"iconv -f ISO-8859-1 UTF-8 -T" + file.getName() + ">" + file.getName() + "-utf8.xxx"

Ce serait seulement quelques lignes en Python, mais je laisse au lecteur le soin de passer en revue les détails de l'itération du répertoire et des expressions régulières.

3

si votre shell est bash, quelque chose comme ça

for files in /mydisk/myfolder/*.xxx 
do 
    iconv -f ISO-8859-1 -t UTF-8 "$files" "${files%.xxx}-utf8.xxx" 
done 
0

Si vous voulez le faire récursive, vous pouvez utiliser find(1):

find /mydisk/myfolder -name \*.xxx -type f | \ 
    (while read file; do 
     iconv -f ISO-8859-1 -t UTF-8 -i "$file" -o "${file%.xxx}-utf8.xxx 
    done) 

Notez que je l'ai utilisé | while read au lieu de -exec option de trouver (ou de canalisation dans xargs) en raison des manipulations que nous devons faire avec le nom de fichier, à savoir, couper l'extension .xxx (en utilisant ${file%.xxx}) et en ajoutant -utf8.xxx.

+0

Voir la réponse d'ekkescorner pour une solution de travail – Kutzi

1

essayez ceci ... Il est testé et Workin:

Première étape (ICONV): find/var/www/-name * .php -type f | (pendant la lecture du fichier; iconv -f ISO-8859-2 -t UTF-8 "$ fichier"> "$ {fichier% .php} .phpnew"; done)

Deuxième étape (REWRITE - MV): find/var/www/-name "* .phpnew" -type f | (Alors que lire le fichier, faire mv $ file echo $file | sed 's/\(.*\.\)phpnew/\1php/', fait)

juste conclusion sur une manière de mes recherches :)

Hope it helps Jakub Rulec

2

Voici par exemple testé dans Mac 10,10. Trouver le fichier par nom, convertir encoder, puis remplacer le fichier original.work parfait. Merci pour l'exemple de Roman Truba, COPY le code complet ci-dessous à votre script shell.

#!/bin/bash 
     find ./ -name *.java -type f | \ 
     (while read file; 
      do if [[ "$file" != *.DS_Store* ]]; then 
      if [[ "$file" != *-utf8* ]]; then 
       iconv -f ISO-8859-1 -t UTF-8 "$file" > "$file-utf8"; 
       rm $file; 
       echo mv "$file-utf8" "$file"; 
       mv "$file-utf8" "$file"; 
      fi 
     fi 
     done); 
+0

J'ai dû le changer en: find ./ -name" * .java "-type f Sinon, il ne wortk récursivement – carlosvini

0

J'étendu scénario Albert.Qings:

  • autodetect le fichier en cours de codage
  • ajouté un paramètre de commande pour faire un endroit sec/exec-run
  • ajouté un paramètre pour le répertoire et motif de nom de fichier

    #!/bin/bash 
    command=${1-"usage"} 
    searchPattern=${2-"*.java"} 
    searchDirectory=${3-"."} 
    if [[ "$command" == "usage" ]]; then 
        echo "convert-file-to-utf8.sh [usage|dry|exec] [searchPattern=$searchPattern] [searchDirectory=$searchDirectory]" 
        exit 
    fi 
    find $searchDirectory -type f -name "$searchPattern" | \ 
    (while read file; 
        do if [[ "$file" != *.DS_Store* ]]; then 
        if [[ "$file" != *-utf8* ]]; then 
         currentEncoding="$(file --brief --mime-encoding $file)" 
         if [[ "$currentEncoding" != "utf-8" ]]; then 
          echo "command:$command/iconv -f $currentEncoding -t UTF-8 $file" 
          if [[ "$command" == "exec" ]]; then 
          iconv -f $currentEncoding -t UTF-8 "$file" > "$file-utf8"; 
          rm $file; 
          echo mv "$file-utf8" "$file"; 
          mv "$file-utf8" "$file"; 
          fi 
         fi 
        fi 
    fi 
    done); 
    

Testé sur MacOS X 10.12.6/Sierra.

Questions connexes