Массово заменить русские буквы на умляуты в CUE

Troyn09

Есть куча CUE файлов в которых путаница с кодировкой, из-за чего умляуты заменились на русски буквы. Выглядит это так:
Kцche вместо Köche
Править кодировку вручную и каждую букву в отдельности, несколько утомительно.
Как бы это массово пофиксить.
Подзадача - переименовать файлы, если в их именах также встречаются такие ошибки.

bestpilot8

Русские буквы вылезают из-за кодировки CP1251. Тебе надо прочитать эти же теги/названия файлов в CP1250 (вроде) и пересохранить в UTF, например, и тогда всё должно быть ок, если софт и ОС вменяемо поддерживают юникод, конечно.

Troyn09

О, уже намного быстрее. Спасибо.

Filan

$ echo Kцche | iconv -t cp1251 | iconv -f cp1250
Köche
Это у тебя файлы с такими названиями или содержимое файла?

svetaslav212

Кц! :D

Troyn09

и то и другое
винда

Filan

Сигвино-клоны вроде идут с iconv-ом в комплекте.
А далее несколько строк скрипта с find и iconv и профит.
У тебя там глубокое дерево с такими ошибками в именах всех каталогов и файлов или просто один каталог с несколькими десятками файлов?
Чуть подробней покажи как выглядят исходные файлы, а я скрипт напишу (если хочешь).

Troyn09

Собственно это каталог с музыкой, весит он 1.2Тб
Вложенность каталогов может быть 5-6 уровней, точнее сложно сказать.
Ошибки могут быть как в именах каталогов/файлов, так и внутри самих CUE файлов.
Вероятно появляются из-за криворукости релизеров.
Выглядит это так:
\Otyg - Дlvefдrd\
Otyg - Дlvefдrd.ape
Otyg - Дlvefдrd.cue
Otyg - Дlvefдrd.log
и т.д. и т.п.
REM GENRE Folk-Rock
REM DATE 1997
REM DISCID 8709ED0C
REM COMMENT "ExactAudioCopy v0.99pb3"
PERFORMER "Otyg"
TITLE "Дlvefдrd"
FILE "Otyg - Дlvefдrd.wav" WAVE
TRACK 01 AUDIO
TITLE "Huldran"
PERFORMER "Otyg"
INDEX 01 00:00:00
TRACK 02 AUDIO
TITLE "I Trollberg Och Skog"
PERFORMER "Otyg"
INDEX 00 03:28:73
INDEX 01 03:30:73
TRACK 03 AUDIO
TITLE "Дlvadimmans Omdaning"
PERFORMER "Otyg"
INDEX 00 07:06:27
INDEX 01 07:08:27
TRACK 04 AUDIO
TITLE "Ulvskrede"
PERFORMER "Otyg"
INDEX 01 10:18:52
TRACK 05 AUDIO
TITLE "Fjдllstorm"
PERFORMER "Otyg"
INDEX 00 13:24:49
INDEX 01 13:26:49
TRACK 06 AUDIO
TITLE "I Hцstlig Drдkt"
PERFORMER "Otyg"
INDEX 00 16:37:54
INDEX 01 16:39:54
TRACK 07 AUDIO
TITLE "Myrdingar - Martyrium"
PERFORMER "Otyg"
INDEX 01 21:24:26
TRACK 08 AUDIO
TITLE "Allfader Vise"
PERFORMER "Otyg"
INDEX 00 24:52:52
INDEX 01 24:54:52
TRACK 09 AUDIO
TITLE "Fjдlldrottningens Slott"
PERFORMER "Otyg"
INDEX 00 28:52:28
INDEX 01 28:54:28
TRACK 10 AUDIO
TITLE "Trollpiskat Цdemarksblod"
PERFORMER "Otyg"
INDEX 00 32:30:29
INDEX 01 32:32:29
TRACK 11 AUDIO
TITLE "Draugen"
PERFORMER "Otyg"
INDEX 00 35:30:36
INDEX 01 35:32:36
TRACK 12 AUDIO
TITLE "Skymningsdans"
PERFORMER "Otyg"
INDEX 00 38:50:41
INDEX 01 38:52:41

svetaslav212

А mp3tag с таким не справляется?

Filan

Скрипт на баше:
if [[ "${0}" == /* ]]; then
SCRIPT="${0}"
else
SCRIPT="`pwd`/${0}"
fi

cd "${1}"

for f in *; do
NEW_NAME=`echo "${f}" | iconv -t cp1251 | iconv -f cp1250`
if [ -d "${f}" ]; then
mv "${f}" "${NEW_NAME}"
"${SCRIPT}" "${NEW_NAME}"
elif [ -f "${f}" ]; then
if [[ "${f}" == *.[Cc][Uu][Ee] ]]; then
cat "${f}" | iconv -t cp1251 | iconv -f cp1250 > "${NEW_NAME}"
rm "${f}"
else
mv "${f}" "${NEW_NAME}"
fi
fi
done

cd -

Сохрани его в файл, например rename.sh, далее запускай так:
chmod +x rename.sh
bash rename.sh /dir/with/files
./rename.sh /dir/with/files
/dir/with/files - каталог, где лежат твои файлы. Что там с виндопутями в сигвино-клонах надо проверять, поэтому лучше, если путь будет на этом же диске или вообще каталог files в текущем каталоге.
На всякий случай перед запуском сделай резервную копию. :-]
Ещё проверь доступность (PATH) всех утилиток типа iconv, mv, cat.

Troyn09

На всякий случай перед запуском сделай резервную копию. :-]
а ты шутник :lol:
завтра проверю, по результату отпишусь

Troyn09

cygwin и liveusb сказали следующее
$ bash -version
bash -version
GNU bash, version 4.1.11(3)-release (x86_64-pc-cygwin)
$ uname -a
uname -a
CYGWIN_NT-6.1 Crypt 1.7.22(0.268/5/3) 2013-07-22 17:06 x86_64 Cygwin
$ bash rename.sh /cygdrive/k/Music
bash rename.sh /cygdrive/k/Music
rename.sh: line 9: syntax error near unexpected token `$'do\r''
'ename.sh: line 9: `for f in *; do

# bash rename.sh /mnt/disk/sdd1/Music/
rename.sh: line 9: syntax error near unexpected token `$'do\r''
'ename.sh: line 9: `for f in *; do
# uname -a
Linux drweb.com 3.2.12-drweb-6.0.2 SMP Thu Aug 9 14:07:04 UTC 2012 i686 Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz GenuineIntel GNU/Linux
# bash -version
GNU bash, version 4.2.20(1)-release (i486-pc-linux-gnu)

Filan

bash rename.sh /mnt/disk/sdd1/Music/

Если у тебя есть LiveUSB с Linux, то сделай так:
chmod +x rename.sh
./rename.sh /mnt/disk/sdd1/Music/

Troyn09

Crypt /cygdrive/k/Music
$ chmod.exe +x rename.sh
Crypt /cygdrive/k/Music
$ bash rename.sh /cygdrive/k/Music
rename.sh: line 9: syntax error near unexpected token `$'do\r''
'ename.sh: line 9: `for f in *; do
Crypt /cygdrive/k/Music
$ ls -la /cygdrive/k/Music/rename.sh
-rwx--x--x+ 1 Administrators None 485 Jul 30 2013 /cygdrive/k/Music/rename.sh

Travelnad

Может из-за этого?
URL

Troyn09

точно

Troyn09

получилось весело
1) русские названия - давай досвидания
$ echo 05Жизнь.mp3 | iconv -t cp1251 | iconv -f cp1250
05Ćčçíü.mp3
2) если iconv не справился, то файл удаляется, пичаль
iconv: (stdin):1:27: cannot convert
было
44110 Feb 20 18:42 cover.jpg
473632968 Jul 12 2008 In Extremo - Kein Blick Zurück CD1.ape
1778 Jul 12 2008 In Extremo - Kein Blick Zurück CD1.cue
1783 Jul 26 19:54 In Extremo - Kein Blick Zurück CD11.cue
931 Jul 12 2008 Kein Blick Zurück CD1.log
стало
44110 Feb 20 18:42 cover.jpg
0 Jul 30 17:22 In Extremo - Kein Blick Zur
931 Jul 12 2008 Kein Blick Zur
462 Jul 30 2013 rename.sh
echo "In Extremo - Kein Blick Zurück CD1.ape" | iconv -t cp1251 | iconv -f cp1250
iconv: (stdin):1:27: cannot convert
In Extremo - Kein Blick Zur

Filan

Вполне ожидаемо.
А ты что хотел чтобы оно само определило у тебя там правильная русская буква или ошибка и там должны быть умляуты?
В условии говорилось, что в каталоге все файлы и каталоги с испорченными названиями.

Troyn09

А ты что хотел чтобы оно само определило у тебя там правильная русская буква или ошибка и там должны быть умляуты?

я ожидал, что скрипт не заработает, поэтому прогонял на тестовом наборе
но что бы настолько все криво я не ожидал :)
В условии говорилось, что в каталоге все файлы и каталоги с испорченными названиями.
ну вообще-то я написал, что "ошибки могут быть" это не тоже самое, что ошибки обязательно будут
спасибо за попытку, дальше сам поколупаю скрипт

Filan

Ты просто лол. Каждое ПО имеет ограничения по применению - ты их проигнорил самым глупым способом. Или ты хотел искусственный интеллект в 10 строчках на шеле?...
В общем, судя по твоей реакции, я зря тратил время на тебя. Как и большинству виндузятников тебе важны шашечки, а не резултьтат - печально. :-(

Troyn09

хотел более развернуто ответить, но передумал
резюмирую - Спасибо, скрипт пригодится.
Оставить комментарий
Имя или ник:
Комментарий: