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

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

Re: [shell-script] Remover acentuação nos nomes dos arquivos...


From: Julio C. Neves
Subject: Re: [shell-script] Remover acentuação nos nomes dos arquivos...
Date: Sun, 18 Dec 2011 16:32:54 -0200

Fala Robson,
acho que o melhor que vc pode fazer é formatar a máquina do teu irmão e
instalar Linux. Afinal, para irmãos sempre desejamos o melhor. ;)

=================1ª SOLUÇÂO=================
  » Para tirar acentos
imagine o tr a seguir com todas as letras acentuáveis e suas substitutas,
sem esquecer Çç. Estou colocando as combinações da letra A somente como
exemplo.

tr áàâãÁÀÂÃé aaaaAAAAe

Então, para renomear todos que têm acento fazer:

for Arq in *[áàâãÁÀÂÃé]*
do
    mv "$Arq" "$(tr áàâãÁÀÂÃé... aaaaAAAAe...)" 2> /dev/null || echo
Impossível renomear $Arq
done

  » Passar para minúsculas:
for Arq in *[A-Z]*
do
    mv "$Arq" "${Arq,,}" 2> /dev/null || echo Impossível renomear $Arq
done

=============FIM DA 1ª SOLUÇÃO==============

=================2ª SOLUÇÂO=================
Me parece que essa é a correta, já que nessa solução vou varrer todo o seu
HD externo.

ListaErrada=$(find /raiz/do/hd/externo -name '*áàâãÁÀÂÃé*' -o -name '
*[A-Z]*')
ListaOK=$(tr [:upper:]áàâãÁÀÂÃé [:lower:]aaaaAAAAe <<< "$ListaErrada")
paste <(echo "$ListaErrada") <(echo "$ListaOK") | xargs -L1 mv
=============FIM DA 2ª SOLUÇÂO==============

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 18 de dezembro de 2011 10:11, Robson - Yahoo <address@hidden>escreveu:

> **
>
>
> Bom dia para todos.
>
> Meu nome é Robson, sou de Campina Grande/PB, uso Ubuntu 10.10 e tenho
> poucos conhecimentos em Shell Script, porisso desejo participar dessa
> lista. Este é meu primeiro tópico. Agradeço a ajuda de todos.
>
> Estou com um problema, tenho um hd externo de 1 tb, e já tem zilhões de
> diretórios e arquivos, só que uma bagunça total, muitos
> arquivos/diretórios em letras maiúscula (ahg que raiva!) e acentuadas,
> quando vou para o computador do meu irmão (win7) os caracteres
> acentuados não são reconhecidos. Queria resolver esse problema de uma
> vez por todas.
>
> Obs.: A partição do hd externo de 1 tb é ntfs, scripts não conseguem ter
> permissão de execução, tenho de mover o diretório para meu hd ext4 e
> executar qualquer scripts (não sei se existe soluções para isso).
>
> Preciso de um script que faça uma varredura em todos os diretórios do hd
> externo, remova todos os acentos tanto dos diretórios como dos arquivos
> e deixe tudo em letras minúsculas.
>
> Achei no Google uns scripts, que funcionaram não muito bem, vejamos:
>
> #!/bin/bash
>
> for file in *;
> do
> newname=`echo "$file" | iconv -t 'ascii//TRANSLIT'`
>
> mv "$file" "$newname"
>
> done
>
> --------------------Esse dá um erro, mas remove os acentos. O erro (eu
> acho), é que ele tenta renomear todos os arquivos, com acento ou não, o
> erro era mais ou menos assim: "você não pode renomear para si mesmo".
> Outro problema, é que tenho de mover o script para cada diretório que
> desejar executar. Tenho zilhões de diretórios, imaginem!! :( e também
> não retira as letras maiúsculas.
>
> Então, fazendo mais buscas, ontem a noite foi longa, passei a buscar nos
> sites em inglês (pouco entendimento) e descobri mais dois scripts, mas
> não sei como unir os dois, e mais, ele coloca um "_" nos espaçamentos,
> eu até queria colocar um "." (ponto nos espaçamentos, mas não interessa
> muito não).
> Vejamos estes dois scripts:
>
> How can I convert all upper-case file names to lower case?
>
> # tolower - convert file names to lower case
>
> for file in *
> do
> [ -f "$file" ] || continue # ignore non-existing names
> newname=$(echo "$file" | tr '[A-Z]' '[a-z]') # lower-case version
> of file name
> [ "$file" = "$newname" ] && continue # nothing to do
> [ -f "$newname" ] && continue # do not overwrite
> existing files
> mv "$file" "$newname"
> done
>
> Purists will insist on using
>
> tr '[[:upper:]]' '[[:lower:]]'
>
> in the above code, in case of non-ASCII (e.g. accented) letters in
> locales which have them.
>
> This technique can also be used to replace all unwanted characters in a
> file name e.g. with '_' (underscore). The script is the same as above,
> only the "newname=..." line has changed.
>
> # renamefiles - rename files whose name contain unusual characters
> for file in *
> do
> [ -f "$file" ] || continue # ignore non-existing names
> newname=$(echo "$file" | sed 's/[^a-zA-Z0-9_.]/_/g')
> [ "$file" = "$newname" ] && continue # nothing to do
> [ -f "$newname" ] && continue # do not overwrite
> existing files
> mv "$file" "$newname"
> done
>
> The character class in [] contains all allowed characters; modify it as
> needed.
>
> -------------------------Não testei estes dois últimos scripts por não
> ter certeza do que ele vai fazer nos meus arquivos preciosos.
> Um amigo me indicou este grupo sobre shell script. Só espero que alguém
> possa me ajudar a resolver meu problema. Vejam que eu pesquisei, não
> gosto de querer tudo na mão sem ao menos fazer uma pesquisa. Como meu
> conhecimento é pouco, e meu inglês péssimo, fico sem saber como resolver
> sozinho.
>
> Mais uma vez eu agradeço a toda equipe desse grupo.
>
> Robson Dantas
> address@hidden
> address@hidden
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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