Pular para o conteúdo

Erro no script. [RESOLVIDO]

Responder tópico
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
  • Denunciar
  • Indicar
01 02

1. Erro no script. [RESOLVIDO]

Enviado em 19/06/2012 - 14:04h

Olá pessoal, estou tentando fazer aqui um pequeno script para procurar strings dentro de arquivos,
se encontrado, mover para outra pasta. segue:


#!/bin/bash
for i in $(grep $1 * | cut -d : -f 1)
do
mv "$i" ./$2/
done


sendo assim, em uma pasta com dezenas de arquivos, chamo o script da seguinte forma:
sh mover.sh cliente backup

o primeiro parametro "cliente" é a string que procuro nos arquivos.
o segundo parametro "backup" é a pasta para onde eu quero mover.

o problema está em arquivos que tem espaço no nome. por exemplo criei um arquivo de teste assim:
echo cliente >> "testando arquivo agora.txt"

depois chamei o comando
sh mover.sh cliente backup

ai retornou os erros:

mv: impossível obter estado de "testando": Arquivo ou diretório não encontrado
mv: impossível obter estado de "arquivo": Arquivo ou diretório não encontrado
mv: impossível obter estado de "agora.txt": Arquivo ou diretório não encontrado


ou seja, ao inves do resultado do comando "grep $1 * | cut -d : -f 1" colocar na variável i o valor "testando arquivo agora.txt" ele está fragmentando o retorno separando por espaços....

alguém pode me dizer o q to fazendo errado?

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

2. Re: Erro no script. [RESOLVIDO]

Melhor resposta

Enviado em 19/06/2012 - 16:38h

Consegui! Eu havia lido um artigo do Júlio (Papo de Botequim) q referia exatamente a modificação do padrão d referência dos arquivos do bash:

http://jneves.wordpress.com/2008/03/05/papo-de-botequim-parte-7/

E resolvi seu problema dessa forma:


#!/bin/bash
oIFS="$IFS"
IFS=
for i in $(grep $1 * | cut -d: -f1)
do
echo "$i"
sleep 5
mv "$i" $2
done
IFS="$oIFS"


Agora vai!

3. Re: Erro no script. [RESOLVIDO]

Enviado em 19/06/2012 - 14:19h

Bom, para automatizar isso eu não sei t informar como faz, mas eu posso t dizer q o Linux trata arquivos com espaços da seguinte forma:


ls testando\ arquivo\ agora.txt


Assim ele identifica q vc quer realmente indicar q o espaço pertence ao msm nome do arquivo. Ae o seu script teria q acrescentar a barra invertida quando achar o arquivo com espaços. A minha sugestão é fazer uma condição para encontrar isso e acrescentar a barra a cada arquivo com espaço com o sed...

4. Re: Erro no script. [RESOLVIDO]

Enviado em 19/06/2012 - 14:42h

Fala Renato,
foi uma boa observação a sua, mas ai eu substitui o espaço por \(espaço) e não resolveu.
ele continua quebrando o retorno quando tem espaço.


5. Re: Erro no script. [RESOLVIDO]

Enviado em 19/06/2012 - 14:47h

Como vc fez essa substituição? Acho q vc fez algo errado...

6. Re: Erro no script. [RESOLVIDO]

Enviado em 19/06/2012 - 14:48h

já tentou assim:


#!/bin/bash
for i in $(grep $1 | cut -d: -f1)
do
mv "$i" ./$2/
done

7. Re: Erro no script. [RESOLVIDO]

Enviado em 19/06/2012 - 15:08h

renato,
substitui assim:

#!/bin/bash
for i in $(grep $1 | cut -d : -f 1 | sed 's/ /\\ /g') #substitua (espaço) por \(espaço)
do
echo "$i"
sleep 5
mv "$i" ./$2/
done


eabreu,
do jeito que vc fez não funciona, pois vc não indicou os arquivos para aplicar o grep.

8. Re: Erro no script. [RESOLVIDO]

Enviado em 19/06/2012 - 15:15h

então a parâmetro $1 representa o diretório aonde estão os arquivos é isso ?

9. Re: Erro no script. [RESOLVIDO]

Enviado em 19/06/2012 - 15:24h

Vc testou o comando sem o script pra saber se dá certo?


grep teste *| cut -d : -f 1 | sed 's/ /\\ /g'


Eu acho q não vai dar certo...

10. Re: Erro no script. [RESOLVIDO]

Enviado em 19/06/2012 - 15:33h

eabreu,
o $1 é a string a ser procurada dentro dos arquivos, e o script está dentro da mesma pasta que os arquivos.

renato,
sem o script o retorno é limpo:
grep cliente * | cut -d : -f 1
testando arquivo agora.txt


só quando faz no script que dá problema....
nossa que canseira...

11. Re: Erro no script. [RESOLVIDO]

Enviado em 19/06/2012 - 15:46h

O problema é no mv! Tente assim:


#!/bin/bash
for i in $(grep $1 | cut -d : -f 1)
do
u=$(echo $i | sed 's/ /\\ /g')
echo "$u"
sleep 5
mv "$u" ./$2/
done

12. Re: Erro no script. [RESOLVIDO]

Enviado em 19/06/2012 - 16:01h

renato,
ainda não deu.
continua com o mesmo problema..
roda ai na sua máquina pra vc ver.
01 02

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Responder tópico

Entre na sua conta para responder.

Fazer login para responder