loop (for) em pasta que tem arquivos com espaço [RESOLVIDO]

1. loop (for) em pasta que tem arquivos com espaço [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 28/10/2016 - 17:50h

gostaria de saber como faço para dar um loop (for) em um a pasta que tem arquivos com espaços onde cada loop deveria me retornar o nome de cada arquivo?

assim funciona (em um script):
lst=*.*
for f in $lst ;
do
echo nome: $f #aqui me retorna corretamente os nomes dos arquivos a cada vez que entra no loop (a variável f contém corretamente o nome completo, mesmo quando o nome do arquivo tem espaço!).
done

mas assim não funciona (em um script):
lst=$(ls *.*)
for f in $lst ;
do
echo nome: $f #aqui a variável f acaba tendo como conteúdo cada palavra (e não o nome do arquivo). ou seja, para cada espaço no nome do arquivo há uma entrada no loop.
done

o que quero é uma solução p fazer com q este segundo exemplo passe a me retornar o nome completo na variável f do loop, e não apenas cada palavra do nome do arquivo.

desde já,

obrigado!


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 31/10/2016 - 21:32h

Isso. Era find no lugar de file.
Certo. Vamos de novo, desta vez com while:

find $diretorio -maxdepth 1 | while read i
do
echo $i
done | sort


sort para ordenar em ordem direta
sort -r para ordenar em ordem reversa

Encaixei o find com while.
Você pode tentar trocar o find por ls.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


3. Re: loop (for) em pasta que tem arquivos com espaço [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 28/10/2016 - 18:23h

Tente assim

for i in *
do
echo "$i"
done


----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



4. Re: loop (for) em pasta que tem arquivos com espaço [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 31/10/2016 - 12:05h

Listeiro, obrigado pela sugestão. mas não resolve o meu problema

sua sugestão é semelhante ao primeiro exemplo q coloquei dizendo q funciona.

não resolve por dois motivos:
1- caso não haja nenhum arquivo ainda assim entra no loop (for), pq a variável f assume o conteúdo "*" (ou "*.*);
2- gostaria de utilizar o comando ls para q eu também pudesse ordenar como ascendente ou descendente;

aguardo então mais sugestões...


5. Re: loop (for) em pasta que tem arquivos com espaço

Perfil removido
removido

(usa Nenhuma)

Enviado em 31/10/2016 - 12:48h

Tenho este palpite:

if [ -n "`ls $diretorio`" ]
then
cd $diretorio
for i in *
do
echo $i
done
cd -
fi


Tem também o for baseado no comando find, com o cuidado de não pesquisar subdiretórios.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



6. Re: loop (for) em pasta que tem arquivos com espaço [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 31/10/2016 - 16:20h

pois é Listeiro....

também já havia tentado algo semelhante a sua sugestão de agora (verificar se tem arquivos no diretório).

por enquanto estou utilizando esta solução como paliativo.

mas assim, ainda continuo sem ter como ordenar de modo ascendente ou descendente (de acordo com a necessidade).

e quanto ao comando find também já haviaa tentado. mas ocorre o mesmo problema do comando ls (qual seja, o de que a variável f não recebe o nome completo do arquivo quando este tem espaços no nome. então o loop (for) acaba ocorrendo para cada palavra (e não para cada arquivo....como eu gostaria)

continuo no aguardo de novas sugestões...


7. Re: loop (for) em pasta que tem arquivos com espaço [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 31/10/2016 - 17:24h

for i in `file $diretorio -maxdepth 1`
do
echo $i
done


É isto?

Para ordem crescente/decrescente usa-se filtragem com o comando sort

for i in `file $diretorio -maxdepth 1`
do
echo $i
done | sort


----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



8. Re: loop (for) em pasta que tem arquivos com espaço [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 31/10/2016 - 19:41h

Listeiro, provavelmente vc quiz dizer `find $diretorio -maxdepth 1` e não `file $diretorio -maxdepth 1`.

mas mesmo assim não me serve. cai no mesmo erro do meu problema original: tanto o find quanto o ls me retorna cada palavra de um arquivo com epaços (e não o nome do arquivo como gostaria).


9. Re: loop (for) em pasta que tem arquivos com espaço

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 01/11/2016 - 10:53h

Listeiro, agora ficou perfeito!

deu certo com sua última sugestão!

curioso: com o loop while funciona corretamente, mas com o loop for não funciona.

tanto com o find quanto com o ls dá certo.

preferi o ls porque o find fica com o "./" antes do nome do arquivo.

p completar, apenas precisei acrescentar um comando p evitar q seja emitido uma mensagem de erro quando não existe arquivos.

ficou mais ou menos assim:


ls -r *.pdf 2> /dev/null | while read i
do
echo $i
done


Mais uma vez obrigado pelas sugestões Listeiro!


10. Re: loop (for) em pasta que tem arquivos com espaço [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/11/2016 - 19:29h

Ok. Bom que deu certo.

Você pode eliminar o ./ usando sed em filtragem:

sed -r 's/^\.\///g'

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



11. Re: loop (for) em pasta que tem arquivos com espaço [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 02/11/2016 - 14:46h

obrigado pela última dica.

Listeiro, o uso do pipe (|) na construção do while como vc sugeriu acabou me trazendo um outro problema.

criei um outro tópico para este novo problema. se tiver alguma solução, agradeço!








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts