Portál AbcLinuxu, 26. dubna 2024 20:37


Dotaz: script na hromadnou změnu kodování pomocí iconv

21.2.2006 10:12 radd
script na hromadnou změnu kodování pomocí iconv
Přečteno: 328×
Odpovědět | Admin
Snažím se vytvořit script, který mě překoduje všechny soubory v adresáři dle masky přípony. Nějak s tím nemůžu hnout - stále mě to hází chybovou hlášku "syntax error near unexpected token iconv" atd. Pokud by někdo věděl, kde je chyba, nebo už má podobný script hotový děkuji mu předem za to.
#/bin/bash
LIST='ls *.php'
for $i in $LIST
	iconv -f WINDOWS-1250 -t UTF-8 $i > $i_tmp
	mv $i_tmp $i
done
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.2.2006 10:31 pida
Rozbalit Rozbalit vše Re: script na hromadnou změnu kodování pomocí iconv
Odpovědět | | Sbalit | Link | Blokovat | Admin
tak rozhodně by mělo být : $i_tmp -> ${i}_tmp
21.2.2006 10:39 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: script na hromadnou změnu kodování pomocí iconv
Odpovědět | | Sbalit | Link | Blokovat | Admin
RTFM bash(1)

Chybí do
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
21.2.2006 11:27 radd
Rozbalit Rozbalit vše Re: script na hromadnou změnu kodování pomocí iconv
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak teď to mám v tomhle stavu a hází to:
line 6: `$i': not a valid identifier
#/bin/bash
LIST=`ls *.php`
for $i in $LIST
	do iconv -f WINDOWS-1250 -t UTF-8 $i > ${i}_tmp
	mv ${i}_tmp $i
done
21.2.2006 11:59 honzaB | skóre: 10 | Praha
Rozbalit Rozbalit vše Re: script na hromadnou změnu kodování pomocí iconv
protože tam máte for $i a ne for i.

jinak bych měl návrh na vylepšení:
#!/bin/bash

LIST=`ls *.php`
TEMP=`mktemp`

for FILE in $LIST
        do iconv -f WINDOWS-1250 -t UTF-8 "$FILE" > "$TEMP"
        mv "$TEMP" "$FILE"
done
21.2.2006 13:10 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: script na hromadnou změnu kodování pomocí iconv
Boha jeho, že jsem si toho nevšim dřív. Co to je?
LIST=`ls *.php`
To má být pokus o blbej vtip?
  1. To selže pro hodně položek, protože přeteče buffer řádky shellu.
  2. ls je naprosto zbytečné, protože LIST=*.php bude fungovat úplně stejně. A taky to úplně stejně v for i in $LIST selže na všech souborech obsahujících mezeru, tabelátor a odřádkování (znaky v IFS)
Takž bych prosil použít:
#!/bin/bash

TEMP="$(mktemp)"

for FILE in *.php
do
    iconv -f WINDOWS-1250 -t UTF-8 "$FILE" > "$TEMP"
    mv "$TEMP" "$FILE"
done
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
21.2.2006 13:51 radd
Rozbalit Rozbalit vše Re: script na hromadnou změnu kodování pomocí iconv
No tak teď mám problém s TEMP="$(mktemp)" Hlásí to "Usage : mktemp [-d][-q][-u] template" a pak začnou padat chyby "no such file or directory"
21.2.2006 14:05 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: script na hromadnou změnu kodování pomocí iconv
Tak použij
TEMP="$(mktemp tmp.XXXXX)"
Kýho výra to máš mktemp, že má povinný template?
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
21.2.2006 14:07 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: script na hromadnou změnu kodování pomocí iconv
Safr, chybí mi tam jedno X, tak ještě jednou:
TEMP="$(mktemp tmp.XXXXXX)"
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.