The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Массовая конвертация имен файлов и каталогов в другую кодировку
Если имена большой группы файлов и каталогов не в 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
 
Раздел:    Корень / Программисту и 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, 14:34, 20/07/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Да Что именно - Вы не спрашивали ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.9, Аноним, 16:01, 20/07/2009 [^] [ответить] [смотреть все]  
  • +/
    чтож вы вредный такой уточняю вопрос с помощью какого ПО скрипта и на всякий ... весь текст скрыт [показать]
     
     
  • 4.12, pavlinux, 18:38, 20/07/2009 [^] [ответить] [смотреть все]  
  • +/
    http www nongnu org mp3tag ... весь текст скрыт [показать]
     
  • 4.14, Vertigo, 21:16, 20/07/2009 [^] [ответить] [смотреть все]  
  • +/
    С помощью easytag можно ... весь текст скрыт [показать]
     
  • 2.18, Agressor, 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, 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, 10:54, 21/07/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Намек понятен, но с другой стороны вопрос не в том как обособиться от товарища а как передать оному скачанные из интернета файлы. Передо мною такая задача возникла.
     
     
  • 3.19, XoRe, 21:53, 24/07/2009 [^] [ответить] [смотреть все]  
  • +/
    >Намек понятен, но с другой стороны вопрос не в том как обособиться
    >от товарища а как передать оному скачанные из интернета файлы. Передо
    >мною такая задача возникла.

    А если scp? )

     
     
  • 4.20, s0ldat, 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:      
    Заголовок:
    Текст:

     Добавить заметку
     Версия для печати
     
     Поиск заметки:
     

    Последние заметки
    - 12.05 Организация шифрованного бэкапа с помощью rdiff-backup, encfs и Dropbox
    - 11.05 Настройка беспроводного соединения в Debian GNU/Linux
    - 07.05 Использование Google Drive в Linux
    - 18.04 Использование нескольких сетевых стеков в Linux
    - 15.04 Восстановление стандартного KDE меню после его удаления (например, wine)
    - 11.04 Настройка gmirror при использовании GPT во FreeBSD 9
    - 09.04 Маршрутизатор на базе FreeBSD с приоритизация трафика средствами PF и ALTQ
    - 02.04 Частичное восстановление данных MySQL из бэкапа, созданного с использованием LVM
    - 21.03 Настройка DNSSEC в BIND 9.9
    - 17.03 Набор номера на Cisco IP Phone 7960/7940 из скрипта
    RSS | Следующие 15 записей >>


    ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

    Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

    Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

    Оформить подписку на год


      Закладки на сайте
      Проследить за страницей
    Created 1996-2012 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList