Подтвердить что ты не робот

Osx изменить кодировку файла (iconv) рекурсивный

Я знаю, что я могу преобразовать одну кодировку файла под OSX, используя:

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

Мне нужно преобразовать кучу файлов с определенным расширением, поэтому я хочу конвертировать кодировку файлов из ISO-8859-1 в UTF-8 для всех *.ext файлов в папке /mydisk/myfolder

возможно, некоторые знают синтаксис, как это сделать

спасибо

Ekke

4b9b3361

Ответ 1

Комментарий Адама показал мне, как его решить, но это был единственный синтаксис, который я заработал:

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... не работает, но >

спасибо again

Ekke

Ответ 2

если ваша оболочка bash, что-то вроде этого

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

Ответ 3

Вот пример, протестированный в mac 10.10. Найдите файл по имени, конвертируйте кодировку, а затем замените оригинальный файл. Благодарим за пример Роман Трубы, КОПИРУЙТЕ полный код ниже в вашей оболочке script.

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

Ответ 4

попробуйте это... он проверен и работает:

Первый шаг (ICONV): find/var/www/-name *.php-type f | (при чтении файла, do iconv -f ISO-8859-2 -t UTF-8 "$ file" > "$ {file%.php}.phpnew"; done)

Второй шаг (REWRITE - MV): find/var/www/-name "*.phpnew" -type f | (при чтении файла, mv $file echo $file | sed 's/\(.*\.\)phpnew/\1php/'; done)

Это просто вывод о моих исследованиях:)

Надеюсь, что это поможет Якуб Рулец

Ответ 5

Вы можете написать script на любом языке сценариев для итерации по каждому файлу в /mydisk/myfolder, проверить расширение с помощью регулярного выражения [. (. *) $], а если оно "ext", запустите следующее (или эквивалент) из системного вызова.

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

Это всего лишь несколько строк в Python, но я оставляю это как упражнение для читателя, чтобы изучить специфику поиска итераций каталогов и регулярных выражений.

Ответ 6

Если вы хотите сделать это рекурсивно, вы можете использовать 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)

Обратите внимание, что я использовал | while read вместо параметра -exec для поиска (или трубопровода в xargs) из-за манипуляций, которые нам нужно делать с именем файла, а именно, измельчением расширения .xxx (используя ${file%.xxx}) и добавив -utf8.xxx.

Ответ 7

Я расширил Albert.Qings script:

  • автоопределить текущую кодировку файла
  • добавлен параметр команды для выполнения сухих /exec -run
  • добавлен параметр для каталога и шаблона имени файла

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

Протестировано на MacOS X 10.12.6/Sierra.