Script contendo o comando "for" para ler lista de arquivos com caractere de espaço [RESOLVIDO]

1. Script contendo o comando "for" para ler lista de arquivos com caractere de espaço [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 05/11/2014 - 16:11h

Olá, estou com um problema ao tentar criar um script que renomeia arquivos. Estou utilizando o comando:
for i in `ls -1 /diretorio/`;do
x=$i;
done

Como os arquivos que desejo renomear possuem o caractere de espaço presentes no nome, toda vez que o comando "for" encontra um caractere de espaço, ele incrementa a variável $i em + 1, logo ocorre uma quebra a linha ao imprimir o conteúdo de $i e assim o nome completo do arquivo não é mostrado em corretamente.

Exemplo do que ocorre:
ls -1 /diretorio
arquivo teste 1
arquivo teste 2
arquivo teste 3

for i in `ls -1 /diretorio`;do
echo $i;
done

A saída será:
arquivo
teste
1
arquivo
teste
2
arquivo
teste
3

Como resolvo esta situação? Alguma ideia de fazer o for não considerar caracteres de espaço ou alguma solução distinta?


  


2. Duas alternativas

Sandro Marcell
smarcell

(usa Slackware)

Enviado em 05/11/2014 - 17:31h

1 - Alterando a variável de ambiente IFS:


bkp_IFS=$IFS
IFS='\n'

for i in `ls diretorio/`; do
echo $i
done

IFS=$bkp_IFS


2 - Usando o while ao invés do for, já que este último por padrão sempre insere quebras de linha em sua saída:


while read i; do
echo $i
done < <(ls diretorio/)



3. Re: Script contendo o comando "for" para ler lista de arquivos com caractere de espaço [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 05/11/2014 - 18:07h

Simples , faça assim :


for i in *;do

echo $i;

done


Obs : Faça um comando 'cd pastaTal' e depois digite esse código , é mais simples

Espero ter ajudado

[]'s

T+


4. Re: Script contendo o comando "for" para ler lista de arquivos com caractere de espaço [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 05/11/2014 - 18:31h

No primeiro caso: alterando o conteúdo da variável IFS, não deu certo. Segue o comparativo após a mudança.

ANTES:
for i in `ls -1 /diretorio`;do
echo $i;
done

Saída:
Testando
isso
agora1
Testando
isso
agora2
Testando
isso
agora3

DEPOIS
bkp_ifs=$IFS
IFS='\n'

for i in `ls -1 /diretorio`;do
echo $i;
done

IFS=$bkp_ifs

SAÍDA:
Testa
do isso agora1
Testa
do isso agora2
Testa
do isso agora3

Logo, o que ocorreu foi que simultaneamente enquanto são ignorados os caracteres de espaço pelo "for", também são removidos todos os caracteres "n" das strings. Logo isso também não poderia acontecer pois com certeza haverá mais letras "n" no meio dos arquivos que pretendo trabalhar.


O while testei dessa forma e deu erro:
erro de sintaxe próximo do token não esperado <


5. Re: Script contendo o comando "for" para ler lista de arquivos com caractere de espaço [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 05/11/2014 - 18:38h

Cara excelente! Muito obrigado.


6. Re: Script contendo o comando "for" para ler lista de arquivos com caractere de espaço [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 05/11/2014 - 21:42h

Amigo , agora escolha a melhor resposta

[]'s

T+


7. Re: Script contendo o comando "for" para ler lista de arquivos com caractere de espaço [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 08/11/2014 - 11:05h

Amigo , agora marque a melhor resposta , para ajudar em tiver essa mesam duvida achar a resposta mais rapidamente

Espero ter ajudado

[]'s

T+






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts