Como renomear diretórios e seus repectivos arquivos recursivamente?

1. Como renomear diretórios e seus repectivos arquivos recursivamente?

Luiz Carlos
luizcarlos18rj

(usa Suse)

Enviado em 11/05/2015 - 15:12h

Oi Galera tenho um script que converte uma codificação de caracteres do windows ( iso8859-1) para Unix ( UTF-8 ), o problema é que ele varre todos os arquivos e diretórios de um mesmo local, e eu queria entrar em cada pasta para varrer os arquivos recursivamente, alguém tem alguma ideia?

Segue o script:


echo ""
echo "-------------------------------------------------"
echo "VERIFICANDO CODIFICACAO DE CARACTERES DO SISTEMA"
echo "-------------------------------------------------"
echo ""
echo "CODIFICACAO DOS ARQUIVOS NO DIRETORIO: "
echo ""
cd /root/Acentos/diretorios_criados/
echo ""
ls | file -i - | cut -d '=' -f2
echo ""
ls
echo ""
echo "CODIFICACAO DO SISTEMA:"
echo ""
locale | grep LC_CTYPE | cut -d '.' -f2
echo ""
echo "--------------"
echo "CONVERTENDO..."
echo "--------------"
echo""
for ARQ in *; do
mv "${ARQ}" "`echo ${ARQ}|iconv -f iso8859-1 -t utf-8`"; done
ls
echo""



  


2. Re: Como renomear diretórios e seus repectivos arquivos recursivamente?

Gildásio Júnior
gjuniioor

(usa Arch Linux)

Enviado em 11/05/2015 - 20:29h

Poderia dar um comando:

$ ls -laR >> /tmp/log_list 


Com alguns filtros, salvando somente o caminho dos arquivos, depois indo pelo script até eles.

Será que ficaria legal assim? hehe

PS: Se sua dúvida/problema foi sanada/resolvido, marque o tópico como resolvido e escolha a melhor resposta. Isso ajuda na organização do site e incentiva o autor da resposta.

"A ignorância não se dá apenas pela falta de conhecimento, mas também pelo desgosto em obtê-lo" - @gjuniioor



3. Re: Como renomear diretórios e seus repectivos arquivos recursivamente?

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 11/05/2015 - 23:24h

luizcarlos18rj escreveu:

Oi Galera tenho um script que converte uma codificação de caracteres do windows ( iso8859-1) para Unix ( UTF-8 ), o problema é que ele varre todos os arquivos e diretórios de um mesmo local, e eu queria entrar em cada pasta para varrer os arquivos recursivamente, alguém tem alguma ideia?

Segue o script:


(...)
for ARQ in *; do
mv "${ARQ}" "`echo ${ARQ}|iconv -f iso8859-1 -t utf-8`"; done
ls
echo""


Substitua esse trecho (que é uma gambiarra feia que dói) por

find /diretorio/com/arquivos -print0 -execdir iconv -o {}_converted -f iso8859-1 -t utf-8 \; # para alterar o conteúdo dos arquivos
find /diretorio/com/arquivos -print0 -execdir mv {} $(echo {} | iconv -f iso8859-1 -t utf-8)_converted \; # para alterar só o nome dos arquivos

O find, ao contrário do for, pesquisa nos subdiretórios também.

EDIT: consegui enxugar mais ainda a minha sugestão pro seu script. Note que removidas as firulas de echo no script essa linha faz todo o trabalho, e você ainda pode fazer o seguinte:

find $1 -print0 -execdir iconv -o {}_converted -f iso8859-1 -t utf-8 \; 


E invocar o script com:
 $ script.sh /caminho/para/arquivos 

O parâmetro $1 indica que a primeira opção passada pro script deve ser usada ali.

Outra coisa: para colocar uma linha em branco basta um echo. Sem as aspas.
--
Luís Fernando Carvalho Cavalheiro
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta