| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/06/2008 17:09:04
|
dlt
JavaEvangelist
![[Avatar]](/images/avatar/f8decd07ac3bcdb30bc816319f3287de.png)
Membro desde: 20/12/2007 16:30:29
Mensagens: 367
Localização: Belo Horizonte
Offline
|
Ola.
Estou iniciando em shell (bash) e to com problemas na hora de listar arquivos de um diretorio, que tem espacos no nome.
Eu sei que quando faco algo parecido com:
o que vai separar os 'itens' do for eh o caractere de espaco.
Como fazer entao pra que a variavel $arquivo cada hora contenha uma linha com o nome completo de um arquivo?
Tenho como mudar o qual caractere vai separar as variaveis do for?
|
"It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical?" - Alan Perlis |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2008 22:18:32
|
dlt
JavaEvangelist
![[Avatar]](/images/avatar/f8decd07ac3bcdb30bc816319f3287de.png)
Membro desde: 20/12/2007 16:30:29
Mensagens: 367
Localização: Belo Horizonte
Offline
|
pra quem tiver o mesmo problema..
eu estava entando fazer algo como:
a solucao eh usar um glob (*.txt)
exemplo:
for file in *.txt
do
mv file txts
done
tentar processar o resultado do ls num script bash eh considerado uma mah pratica
|
"It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical?" - Alan Perlis |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2008 11:25:35
|
peczenyj
Moderador
![[Avatar]](/images/avatar/299dc35e747eb77177d9cea10a802da2.jpg)
Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline
|
O problema é entender algumas substituições que o Bash faz
quando vc faz
for i in $(comando) ; do
...
done
O bash vai interpretar linha a linha, caracter a caracter até encontrar o $(
ai ele fica esperto: humm.... tenho q substituir o que vem a seguir pelo resultado do comando entre '$(' e ')'.
se o comando retornar "um dois tres", isso passa a ser
for i in um dois tres; do
...
done
Agora... se vc tem um arquivo chamado "um dois tres", o for não vai entender, por causa do IFS.
IFS - input field separator. vc esta usando no nome do arquivo um caracter que é separador de campos/parametros. ai o for se confunde.
Vc pode fazer 2 coisas: uma ganbiarra pra proteger o nome desse arquivo
for i in "$(ls -Q)" ; do
...
done
Que geralmente não funciona 100% dos casos e é muito dependente de plataforma.
Ou vc pode usar um conjunto mais inteligente de ferramentas para este fim!
$ ls -l
total 0
-rw-r--r-- 1 xxx Nenhum 0 Jul 27 12:33 tres
-rw-r--r-- 1 xxx Nenhum 0 Jul 27 12:33 um dois
$ find . -type f -print0 | xargs --null -n 1
./tres
./um dois
fica a dica: de uma olhada no man do find/xargs -- tem uma surpresa reservada pra vc
|
http://pacman.blog.br
'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.' |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2008 19:24:27
|
dlt
JavaEvangelist
![[Avatar]](/images/avatar/f8decd07ac3bcdb30bc816319f3287de.png)
Membro desde: 20/12/2007 16:30:29
Mensagens: 367
Localização: Belo Horizonte
Offline
|
bela surpresa :
man xargs wrote: Because Unix filenames can contain blanks and newlines, this default
behaviour is often problematic; filenames containing blanks and/or new-
lines are incorrectly processed by xargs. In these situations it is
better to use the -0 option, which prevents such problems. When using
this option you will need to ensure that the program which produces the
input for xargs also uses a null character as a separator. If that
program is GNU find for example, the -print0 option does this for you.
comparando as alternativas no cygwin:
1)
2)
|
"It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical?" - Alan Perlis |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2008 09:18:22
|
dlt
JavaEvangelist
![[Avatar]](/images/avatar/f8decd07ac3bcdb30bc816319f3287de.png)
Membro desde: 20/12/2007 16:30:29
Mensagens: 367
Localização: Belo Horizonte
Offline
|
a proposito, vc conhece esse guia?
procurando na internet depois, achei esse link bacana falando do xargs.. eu não usava muito a ferramenta
This message was edited 2 times. Last update was at 28/07/2008 14:17:37
|
"It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical?" - Alan Perlis |
|
|
 |
|
|