The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Массовая конвертация имен файлов и каталогов в другую кодировку
Если имена большой группы файлов и каталогов не в 7-битной ASCII-кодировке (латиница), 
то при их переносе между операционными системами с разными локальными кодировками могут возникнуть 
сложности - нечитаемые знаки вместо привычных имен файлов. Одним из возможных
решений будет использование
нижеописанного shell-скрипта, которым можно рекурсивно переконвертировать имена сколь 
угодно большой группы каталогов и файлов из одной кодировки в другую (не боится пробелов в именах):

#!/bin/sh
# Script for bulk recode files and directories names
# to another encodings.
#
# Usage:
#    $ brecode.sh <source_dir> <new_dir>
#

# source encoding. If commented out, then current locale is used
#RECODE_FROM="UTF8"

# target encoding (mandatory)
RECODE_TO="CP1251"

#### error function
err()
{
    echo >&2
    echo "$(basename ${0}): error: ${1}" >&2
    echo "exit" >&2
    echo >&2
    exit 1
}

#### check arguments
if test "x${1}" = "x"
then err "no arguments specified"
elif ! test -d "${1}"
then err "directory '${1}' not found"
elif test "x${2}" = "x"
then err "source directory not specified"
elif test -e "${2}"
then err "object '${2}' already exists"
fi

#### check utilities
for U in find iconv
do which ${U} >/dev/null || err "${U} utility not found"
done

#### recode  & copy
find "${1}" | while read S
do
    if test ${RECODE_FROM}
    then N="${2}/$(echo ${S} | iconv -f ${RECODE_FROM} -t ${RECODE_TO})"
    else N="${2}/$(echo ${S} | iconv -t ${RECODE_TO})"
    fi

    if test -d "${S}"
    then mkdir -p "${N}" || err "mkdir failed"
    else cp "${S}" "${N}" || err "cp failed"
    fi
done
 
Ключи: shell, recode, charset
Раздел:    Корень / Программисту и web-разработчику / Shell / Готовые скрипты

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, anonymous (??), 20:37, 19/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    convmv - converts filenames from one encoding to another.
     
     
  • 2.17, нео (?), 17:44, 21/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    я тоже не понял, че он изобретал колсо, лол
     

  • 1.2, Zenitur (?), 21:10, 19/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо. Давно столкнулся с конфликтами KDE и Gnome в этом плане.
     
     
  • 2.11, Andrey Mitrofanov (?), 17:06, 20/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Баг GTK с не-UTF локалью? http:/openforum/vsluhforumID15/2382.html#9
     

  • 1.3, ViT (?), 21:18, 19/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А чтонить подобное для тегов мп3-файлов есть?
     
     
  • 2.7, ABATAPA (ok), 14:34, 20/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    > А чтонить подобное для тегов мп3-файлов есть?

    Да. Что именно - Вы не спрашивали.

     
     
  • 3.9, Аноним (-), 16:01, 20/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    чтож вы вредный такой. уточняю вопрос: с помощью какого ПО/скрипта (и на всякий случай как) можно производить массовую перекодировку тегов мп3-файлов? пожалуйста ответьте.
     
     
  • 4.12, pavlinux (ok), 18:38, 20/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    http://www.nongnu.org/mp3tag/
     
  • 4.14, Vertigo (ok), 21:16, 20/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    С помощью easytag можно.
     
  • 2.18, Agressor (ok), 18:23, 24/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    для mp3 есть id3iconv - на яве писана. Превосходно работает.
     

  • 1.4, vadiml (?), 22:24, 19/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что-то скрипт уж очень большой. Я когда-то сделал так:
    find | sort -r | while read f; do
        fn=$(basename "$f"|iconv -f cp1251 -t utf-8);
        [ "$fn" = "$(basename "$f")" ] || mv "$f" "$(dirname "$f")/$fn";
    done
     
     
  • 2.8, ABATAPA (ok), 14:37, 20/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Что-то скрипт уж очень большой. Я когда-то сделал так:
    >find | sort -r | while read f; do

    И делали неверно. Ибо будут проблемы с кавычками и спецсимволами в именах.
    Правильно:
    find . -print0 | xargs -0 ...

     

  • 1.5, angel_il (?), 00:12, 20/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    $ mc
    в mc нажимаем ctrl-t помечаем файлы, жмем f6
     
  • 1.6, ravil (?), 02:18, 20/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    convmv уже сто лет в обед есть. велосипедисты нищасные блджад.
     
  • 1.10, NicK (?), 16:09, 20/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Спасибо. Давно столкнулся с конфликтами KDE и
    >Gnome в этом плане.

    Не понял. это как??? Там везде одна кодировка utf-8.

     
  • 1.13, an (??), 19:08, 20/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    mp3unicode
     
  • 1.15, Дмитрий (??), 02:37, 21/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ещё бы кто-то написал скрипт парсинга файлов с заменой русско-пробельных символов на транс-литерацию с обрезанием до 15 символов - вот было бы хорошо ...
     
     
  • 2.16, s0ldat (ok), 10:54, 21/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Намек понятен, но с другой стороны вопрос не в том как обособиться от товарища а как передать оному скачанные из интернета файлы. Передо мною такая задача возникла.
     
     
  • 3.19, XoRe (ok), 21:53, 24/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Намек понятен, но с другой стороны вопрос не в том как обособиться
    >от товарища а как передать оному скачанные из интернета файлы. Передо
    >мною такая задача возникла.

    А если scp? )

     
     
  • 4.20, s0ldat (ok), 22:13, 24/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >А если scp? )

    Тогда уже FTP. В данном случае подразумевается передача файлов на накопителе данных, на файловой системе.

     

  • 1.21, руттиток (?), 10:32, 25/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    НАрод! а как приэтом сделать конвертирование еще содержимого? )
     
  • 1.22, warpson (??), 16:48, 26/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    посредством iconv
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру