osx change file encoding (iconv) recursive

Wiem, że mogę przekonwertować kodowanie pojedynczego pliku POD OSX używając:

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

Muszę przekonwertować kilka plików z określonym rozszerzeniem, chcę więc przekonwertować kodowanie plików z ISO-8859 - 1 na UTF-8 dla wszystkich *.pliki ext w folderze / mydisk / myfolder

Być może ktoś zna składnię jak to zrobić

Thanks

Ekke

Author: ekkescorner, 2009-07-25

7 answers

Komentarz Adama pokazał mi, jak to rozwiązać, ale to była jedyna składnia, którą udało mi się wykonać:

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... nie działa, ale >

Thx again

Ekke

 25
Author: ekkescorner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-03 08:20:28

Jeśli twoja powłoka to bash, coś takiego

for files in /mydisk/myfolder/*.xxx
do
  iconv -f ISO-8859-1 -t UTF-8 "$files" "${files%.xxx}-utf8.xxx"
done
 3
Author: ghostdog74,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-25 13:23:00

Oto przykład przetestowany w mac 10.10. Znajdź plik po nazwie, przekonwertuj kod ,a następnie zastąp oryginalny plik.praca idealna. Dzięki za przykład Romana Truby, skopiuj poniższy Pełny kod do skryptu powłoki.

   #!/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);
 2
Author: Albert.Qing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-14 22:57:46

Spróbuj tego ... jego przetestowane i działa:

Pierwszy krok (ICONV): find / var / www / - name*.php-type f / (while read file; do iconv-F ISO-8859-2 -T UTF-8 "$plik " > " ${plik%.php}.phpnew"; done)

Drugi krok (REWRITE-MV): find / var / www / - name"*.phpnew" -type f / (while read file; do MV $file echo $file | sed 's/\(.*\.\)phpnew/\1php/'; done)

To tylko wniosek z moich badań:)

Hope it helps Jakub Rulec

 1
Author: Jakub Rulec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-10 19:13:08

Możesz napisać skrypt w dowolnym języku skryptowym do iteracji nad każdym plikiem w /mydisk / myfolder, sprawdzić rozszerzenie za pomocą wyrażenia regularnego [.(.* )$], a jeśli jest to "ext", uruchom następujące (lub równoważne) z wywołania systemowego.

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

To byłoby tylko kilka linijek w Pythonie, ale pozostawiam to jako ćwiczenie dla czytelnika, aby przejść przez specyfikę szukania iteracji katalogów i regularnego wyrażenia.

 0
Author: Stefan Kendall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-25 13:00:02

Jeśli chcesz to zrobić rekurencyjnie, możesz użyć 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)

Zauważ, że użyłem | while read zamiast -exec opcji find (lub przekierowania do xargs) ze względu na manipulacje, które musimy zrobić z nazwą pliku, a mianowicie, odcinając rozszerzenie .xxx (używając ${file%.xxx}) i dodając -utf8.xxx.

 0
Author: Adam Rosenfield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-25 13:49:32

Rozszerzyłem Albert.Skrypt Qings:

  • automatyczne wykrywanie bieżącego kodowania pliku
  • dodano parametr polecenia do wykonania dry / exec-run
  • Dodano parametr dla wzorca katalogu i nazwy pliku

    #!/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);
    

Przetestowano na MacOS X 10.12.6 / Sierra.

 0
Author: Hardi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-23 22:42:02