Arquivos com espaço e caracteres [RESOLVIDO]

1. Arquivos com espaço e caracteres [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 14/12/2009 - 21:24h

Galera, o problema é o seguinte..
Tenho várias pastas com vários arquivos nomeados com espaços e caracteres, ex: file (1).txt, file (2).txt, etc.
Preciso retirar o espaço e os caracteres dos arquivos (neste caso os parenteses), para ficar assim: file_1.txt, file_2.txt, file_n.txt.
Bom, fiz e refiz vários scripts, mas até agora não tive sucesso.
O problema é que quando o "for" entra em ação ele não lista os meus arquivos corretamente, mas sim quebrados..até desconfiei que não posso usar o awk para este fim. Olhem o script:

#/bin/bash
j=0
for i in $(ls -l | awk '{print $9" "$10" "$11}')
do
mv $i file_$j.txt
echo "Renomeando $i para file_$j.txt"
j=`expr $j + 1`
done

A sintaxe do script está correta, o problema é a saída do "for" que exibe apenas o nome "quebrado" dos arquivos.
Obs: o awk $9 $10 $11 é para capturar o nome completo do arquivo, pois alguns contém mais que um espaço e caracter.
Valeu!!


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 14/12/2009 - 22:04h

experimenta isso

{{{
find . -name '* *' | while read file;
do
target=`echo "$file" | sed 's/ /_/g'`;
echo "Renaming '$file' to '$target'";
mv "$file" "$target";
}}}

abs

3. Re: Arquivos com espaço e caracteres [RESOLVIDO]

Jefferson Diego
Diede

(usa Debian)

Enviado em 14/12/2009 - 21:51h

Preferi usar o find, por procurar com recursividade. Fica mais fácil, pois é só rodar o comando no diretório que contém os outros...
Testei aqui criando os arquivos "file (1).txt" e "file (2).txt".
Não sou lá um perito em sed, então cada instância remove uma coisa. São 3 por aquivo. O primeiro tira "(", o segundo tira ")", e o terceiro os espaços...
Se alguém souber como fazer isso em uma instância só do sed, gostaria de aprender...
Bem... ficou assim:

#! /bin/bash
find| grep -i "(\|)"| while read arquivoszuados; do echo Renomenando $arquivoszuados; mv "$arquivoszuados" $(echo $arquivoszuados| sed 's/(//g'| sed 's/)//g'| sed 's/ //g'); done


4. Re: Arquivos com espaço e caracteres [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 14/12/2009 - 22:21h

Valeu galera..as 2 respostas são ótimas.
Quebrou um galhão aq!
Abraço



5. Re: Arquivos com espaço e caracteres [RESOLVIDO]

Marcus Fazzi
anunakin

(usa Gentoo)

Enviado em 13/08/2012 - 09:16h

Para fazer o que o colega pediu tem de ser com o sed:

#/bin/bash
for file in *
do
mv "$file" $(echo "$file" | sed 's/[^A-Za-z0-9_.]/_/g')
done






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts