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

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

Re: [shell-script] Alterando nomes de arquivos com caracteres especiais


From: Julio C. Neves
Subject: Re: [shell-script] Alterando nomes de arquivos com caracteres especiais
Date: Sat, 16 Aug 2008 02:37:33 -0300

Fala Victor,
se vc está usando bash, troque o for do seu programa pelo seguinte:

for ComAcen in `find . -name '*\?'`
do
SemAcen=`echo $ComAcen | tr "?" x`

# listando os 2 em ordem cronologica (-t) e
# pegando o + novo (head -1). Se o que acabamos de tirar
# os acentos for mais novo, será renomeado.
mv -f $ComAcen $SemAcen
done

Os comentários acima não entendi bulhufas...

Outra forma interessante de fazer é:

ArqsVeio=$(find . -name '*\?')
ArqsNovo=$(tr "?" x <<< "$ArqsVeio"
paste -d' ' <(echo "$ArqsVeio") <("$ArqsNovo") | xargs -L1 mv

Assim ArqsVeio terá somente uma pilha dos arquivo com ?. O tr cria em
ArqsNovo outra pilha sem acento. O paste monta uma pilha com os pares
separados por branco. o xargs pega cada um deste pares e põe à frente do rm.

Para pesquisar:
*paste:*
http://twiki.softwarelivre.org/TWikiBar/TWikiBarPapo003#Se_tem_cut_tem_paste
*substituição de processos <(...) :*
http://twiki.softwarelivre.org/TWikiBar/TWikiBarPapo011#Substitui_o_de_processos
*xargs: *http://twiki.softwarelivre.org/TWikiBar/TWikiBarBirinaite

Tudo escrito em Português e cheio de exemplos curtos e fáceis.
-- 
Abraços,
Julio
*Em setembro estarei dando um treinamento
Shell em Brasília (em 2 fins de semana).
Mais informações: www.tecnologiabr.com.br
Tel: (61) 3354-3162*

2008/8/14 aiok_gui <address@hidden>

>   Olá amigos,
>
> Meu nome é Victor e usei muito o Linux de 97 a 2001. Depois dei uma
> parada para trabalhar com Win (coisas do ofício).
>
> Bem, atualmente estamos incubados na Fundação Softville, em Joinville-SC.
>
> Estou com um problema e após procurar e estudar bastante e não
> conseguir resolver meu problema, fui procurar nos fóruns para ver se
> encontrava uma solução.
>
> Achei um post do Julio Cezar Neves para renomear um grupo de arquivos
> com caracteres especiais (acentuados).
>
> Vou relatar meu problema e gostaria que, se possível, vocês nos
> ajudassem: Tenho uma máquina com Windows XP (hda1 - C: e hda2 - D:).
> Ao instalar o Debian 4, eu provavelmente alterei o hda2 para hidden.
> Bem, consegui com o gpart/cfdisk recuperar a partição.
> Ao entrar no Windows, lá está o D:, mas vazio. Retornando no Linux,
> montei como root a partição, consegui ler os arquivos, mas não consigo
> gravar na partição, mesmo mudando as permissões para total (777).
>
> Bem, uma solução para recuperar os arquivos, a partir do Linux, seria
> gravar os dados do D: (hda2) para um diretório qualquer (p.e.
> /home/d), mas como os arquivos acentuados aparecem com o caracter "?",
> que é um coringa, não consegui copiar/mover.
>
> O script do Julio que encontrei é o script abaixo adaptado por mim:
>
> #!/bin/bash
> #
> # Testando se vc passou o diretorio como parametro
> # default = diretorio corrente.
> #
> if [ $# -eq 1 ]
> then
> Dir=$1
> else
> Dir="."
> fi
> cd $Dir
> for ComAcen in `ls -R | grep '[\?]'`
> do
> SemAcen=`echo $ComAcen | tr "[\?]" "[x]"`
>
> # listando os 2 em ordem cronologica (-t) e
> # pegando o + novo (head -1). Se o que acabamos de tirar
> # os acentos for mais novo, será renomeado.
> mv -f $ComAcen $SemAcen
> done
>
> -------------
>
> Como não terei arquivos com nomes repetidos, o if que fazia este teste
> dentro do for foi retirado.
>
> Fui pra linha de comando, gravei este arquivo em /mnt e mudei
> a permissão para execução. Mas ao executar, ele não faz o que
> gostaria, ou seja, mudar o "?" para "x".
> Já tentei mudar de "/?" para "?", mas também não funcionou.
>
> Alguém poderia me ajudar?
>
> Cordialmente,
>
> Victor
>
>  
>



-- 
Abraços,
Julio
Em setembro estarei dando um treinamento
Shell em Brasília (em 2 fins de semana).
Mais informações: www.tecnologiabr.com.br
Tel: (61) 3354-3162


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



reply via email to

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