shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Re: Mover arquivos depois normatilizá-los


From: Tiago Peczenyj
Subject: Re: [shell-script] Re: Mover arquivos depois normatilizá-los
Date: Tue, 17 Jan 2012 13:48:20 -0200

existe um problema nessa abordagem, mas ela deve ser suficiente em boa
parte dos casos.

acontece que uma letra acentuada pode ser representada de duas formas

a letra é por exemplo pode ser

U+00E9 ʟᴀᴛɪɴ sᴍᴀʟʟ ʟᴇᴛᴛᴇʀ ᴇ ᴡɪᴛʜ ᴀᴄᴜᴛᴇ
ou
combinação de U+0065 ʟᴀᴛɪɴ sᴍᴀʟʟ ʟᴇᴛᴛᴇʀ com U+0301 ᴄᴏᴍʙɪɴɪɴɢ ᴀᴄᴜᴛᴇ ᴀᴄᴄᴇɴᴛ

Para funcionar coisas desse tipo é preciso normalizar as strings
envolvidas. Nesse caso precisamos escolher se vamos fazer uma NFC ou
NFD

NFC: Canonical Decomposition
NFD: Canonical Decomposition, followed by Canonical Composition

fonte:
http://unicode.org/reports/tr15/

O importante é, qualquer que seja a escolha, deve ser aplicada em
ambos os lados, tanto nos argumentos do tr quanto no no arquivo em si.
Por exemplo se escolhermos a NFD precisamos primeiros executar sobre o
script uma NFD e depois garantir que a entrada dos dados sera
normalizada da mesma forma, assim um é sera igual a um é.

É virtualmente impossivel de distinguir a diferença entre dois é sem
usar algo como hexdump. Depende do setup do seu editor para o é ser um
byte ou dois.

Como fazer isso em shell? Hoje eu tenho uma solução para o mundo linux
com convmv com as opcões:

--nfc
target files will be normalization form C for UTF-8 (Linux etc.)

--nfd
target files will be normalization form D for UTF-8 (OS X etc.).

Espero ter ajudado

Tiago

2012/1/17 Julio C. Neves <address@hidden>
>
>
>
> ERREI! Me esqueci de algo fundamental. Eu escrevi:
>
>
>
> mv $(paste <(ls *) <(ls * | tr -d ' ' | tr [:upper:] [:lower:] | tr
> áàâãéêíîóôõúç aaaaeeiiooouc))
>
> Mas queria mesmo era ter escrito:
>
>
> paste <(ls *) <(ls * | tr -d ' ' | tr [:upper:] [:lower:] | tr
> áàâãéêíîóôõúç aaaaeeiiooouc) | xargs -L1 mv
>
>
> Abcs,
> Julio
> *Já foi lançado "Bombando o
> Shell<http://www.brasport.com.br/index.php?dispatch=products.view&product_id=666>
> ". *
> *Show **de interfaces gráficas sob Shell!*
> *
> *
>
> Em 17 de janeiro de 2012 13:26, Julio C. Neves <address@hidden>escreveu:
>
>
> > One-liner:
> >
> > mv $(paste <(ls *) <(ls * | tr -d ' ' | tr [:upper:] [:lower:] | tr
> > áàâãéêíîóôõúç aaaaeeiiooouc))
> >
> > Abcs,
> > Julio
> > *Já foi lançado "Bombando o 
> > Shell<http://www.brasport.com.br/index.php?dispatch=products.view&product_id=666>
> > ". *
> > *Show **de interfaces gráficas sob Shell!*
> > *
> > *
> >
> >
> >
> > Em 17 de janeiro de 2012 13:12, Anderson Duarte <address@hidden>escreveu:
> >
> > **
> >>
> >>
> >> O Script do Aurélio, funcoeszz faz isso.
> >> Se vc instalar ele em sua maquina e depois abrir o script no editor, verá
> >> que a função chamada de "zzarrumanome" faz exatamente isso que vc quer.
> >> Tira acentos, espaços, (junta com um "_") e deixa tudo em minúsculo
> >>
> >> http://funcoeszz.net/
> >>
> >> Uso e recomendo. :)
> >>
> >> --
> >> Anderson Duarte (Rizada) 
> >> http://rizada.org
> >> @andersonrizada
> >>
> >>
> >> [As partes desta mensagem que não continham texto foram removidas]
> >>
> >>
> >>
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> 




--
Tiago B. Peczenyj
Linux User #405772

http://pacman.blog.br


reply via email to

[Prev in Thread] Current Thread [Next in Thread]