LINUX.ORG.RU

Команда для массового конвертирования... помогите составить


0

0

Итак, есть папка, в ней есть несколько сотен словарей в формате .ifo их нужно переконвертировать в формат .ll

Для одного (первого) файла 0001.ifo команда такая:

$ makedict -o dummy -i stardict 0001.ifo | dummy2lightlang.pl -s en --info 0001.ifo > 0001.ll

Как можно сделать команду/скрипт, чтоб автоматом переконвертировать ВСЕ словари? Может как-то через "find"? но у меня 3-х этажный конвеер не получился...

спасибо

Если пробелов в именах исходных словарей нет, то как то так

for i in *.ifo do out=`echo $i | sed 's/.ifo/.ll/'` makedict -o dummy -i $i | dummy2lightlang.pl -s en --info $i > $out done

Если словари разбросаны по разным каталогам, то вместо *.ifo можно попробовать подставить `find <путь> -iname "*.ifo".

marsijanin ★★
()
Ответ на: комментарий от marsijanin

#!/bin/bash

function myconvert(){
FNAME=`basename $1`
echo "makedict -o dummy -i stardict $1 | dummy2lightlang.pl -s en --info $1 > $FNAME.ll "
}

_IFS=$IFS
IFS=$'\n'
for name in {`find .`} ; do
myconvert "$name" ;
done;
IFS=${_IFS}%

с пробелами работаер и рекурсивно

wfrr ★★☆
()
Ответ на: комментарий от marsijanin

>Если пробелов в именах исходных словарей нет, то как то так

а если есть, то заменить $i на "$i" (в кавычки взять)

generatorglukoff ★★
()

find . -type f -name '*.ifo' | while read F; do N="$(echo $F | sed 's|\.ifo$|.ll|')"; makedict -o dummy -i stardict "$F" | dummy2lightlang.pl -s en --info "$F" >"$N"; done

Как-то так.

php-coder ★★★★★
()
Ответ на: комментарий от php-coder

Спасибо, [b]php-coder[/b], правильно сработал только твой вариант.

Остальные

[b]marsijanin[/b]
[code]
$ for i in *.ifo do out=`echo $i | sed 's/.ifo/.ll/'` makedict -o dummy -i $i | dummy2lightlang.pl -s en --info $i > $out done
bash: syntax error near unexpected token `|'
[/code]
исправленный вариант тоже странно ругнулся
[code]Unknown input format: 'ifo'[/code]

[b]wfrr[/b]
[code]
$ sh 1.sh
makedict -o dummy -i stardict {. | dummy2lightlang.pl -s en --info {. > {..ll
makedict -o dummy -i stardict ./1.sh | dummy2lightlang.pl -s en --info ./1.sh > 1.sh.ll
makedict -o dummy -i stardict ./atla02_eng-rus_computer.dict | dummy2lightlang.pl -s en --info ./atla02_eng-rus_computer.dic
makedict -o dummy -i stardict ./atla02_eng-rus_computer.idx | dummy2lightlang.pl -s en --info ./atla02_eng-rus_computer.idx
makedict -o dummy -i stardict ./atla02_eng-rus_computer.ifo | dummy2lightlang.pl -s en --info ./atla02_eng-rus_computer.ifo
makedict -o dummy -i stardict ./eng-rus_math_alexandrov.dict | dummy2lightlang.pl -s en --info ./eng-rus_math_alexandrov.dic
makedict -o dummy -i stardict ./eng-rus_math_alexandrov.idx | dummy2lightlang.pl -s en --info ./eng-rus_math_alexandrov.idx
makedict -o dummy -i stardict ./eng-rus_math_alexandrov.ifo} | dummy2lightlang.pl -s en --info ./eng-rus_math_alexandrov.ifo
[/code]
эффекта нет :(


Всем спасибо за отклики ;)

sspphheerraa
() автор топика
Ответ на: комментарий от sspphheerraa

yну в меоем скрипте было как миниму мдве ошибки которые я вспонил только придя седня на работу, а с работы яне сижу на лоре, это basename - я невнимательно читал хелп, ей нужно указывать суффкис. и не указал фильтр. Кстати php-coder указал лучший вариант так как у него список файлов не хранится в промежуточной переменной.

wfrr ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.