Shell Script [RESOLVIDO]

1. Shell Script [RESOLVIDO]

Hugo Leonardo Costa Santos
hlcsantos

(usa Ubuntu)

Enviado em 02/07/2009 - 14:46h

Fazer um script shell para listar os arquivos de um diretório especificado e dizer se o arquivo é do tipo diretório ou arquivo comum.
Como faço isso?
Sou iniciante no linux [usá-lo por código] e queria saber como faço esse script!
Abraços!


  


2. Re: Shell Script [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 02/07/2009 - 15:02h

Da uma olhada neste scrip e ve se consegue entender o que eu fiz.

#/bin/sh

ls /home/backup/ > /home/backup/lista # lista um caminho e joga para um arquivo
cat /home/backup/lista | while read linha; do
if [ -d /home/backup/$linha ]; then
echo $linha "eh pasta"
elif [ -f /home/backup/$linha ]; then
echo $linha "eh um arquivo"
else
echo $linha "sei la o que eh"
fi
done


ABS


3. Re: Shell Script [RESOLVIDO]

Hugo Leonardo Costa Santos
hlcsantos

(usa Ubuntu)

Enviado em 02/07/2009 - 15:14h

Não entendi isso
ls /home/backup/ > /home/backup/lista # lista um caminho e joga para um arquivo
cat /home/backup/lista | while read linha;



4. Re: Shell Script [RESOLVIDO]

Jefferson Diego
Diede

(usa Debian)

Enviado em 02/07/2009 - 15:57h

O que o amigo fez acima:
1. ls /home/backup/ > /home/backup/lista
A listagem do conteudo do diretório /home/backup/ é jogada no arquivo /home/backup/lista

2. cat /home/backup/lista | while read linha;
É lido o arquivo criado no passo 1, e linha a linha é passada em laço (while), sendo posteriormente analisada testando-se ser diretório ou arquivo.


5. Re: Shell Script [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/07/2009 - 16:01h

ls /home/backup/ > /home/backup/lista # lista um caminho e joga para um arquivo
cat /home/backup/lista | while read linha;

============================================================
1° linha

ls "lista arquivos e diretorios"
/home/backup "seria o diretorio escolhido"
/home/backup/lista "seria um arquivo que esta sendo criado, e o conteudo dele eh tudo oq o comando ls listou dentro do diretorio /home/backup"

2° linha
cat /home/backup/lista "ira listar todo o conteudo do arquivo lista"
while "testa continuamente (um loop) uma expresão até que ela se torne falsa"
read linha "nao entendo muito de script, mas parece que ele esta criando uma variavel chamada linha, e linha ($linha) vai significar todo o conteudo do arquivo lista"

========================================================

vcs devem ter visto que nao sei muito de script, mas foi isso que entendi

rodei aki, mas fiz algumas alterações

===========================================================

#/bin/sh

ls /home/douglas/ > /home/douglas/lista # lista um caminho e joga para um arquivo
cat /home/douglas/lista | while read linha; do
if [ -d /home/douglas/$linha ]; then
echo $linha "eh pasta"
elif [ -f /home/douglas/$linha ]; then
echo $linha "eh um arquivo"
else
echo $linha "sei la o que eh"
fi
done

======================================================

e o resultado foi esse

================================================

douglas@CASA:~$ sh teste.sh
Desktop eh pasta
FrostWire eh pasta
teste.sh: line 5: [: too many arguments
teste.sh: line 7: [: too many arguments
Musica Electronica Here We Go-Kaylab.mp3 sei la o que eh
teste.sh: line 5: [: too many arguments
teste.sh: line 7: [: too many arguments
Sem título 1.odt sei la o que eh
backup eh pasta
download eh pasta
imagens eh pasta
jogos eh pasta
lista eh um arquivo
outros eh pasta
programas eh pasta
programação eh pasta
scripts eh pasta
sons eh pasta
teste.sh eh um arquivo

=================================================

soh nao sei oq foi isso

teste.sh: line 5: [: too many arguments
teste.sh: line 7: [: too many arguments
Musica Electronica Here We Go-Kaylab.mp3 sei la o que eh
teste.sh: line 5: [: too many arguments
teste.sh: line 7: [: too many arguments

flw


6. Re: Shell Script [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 02/07/2009 - 16:03h

Vamos destrinchar então, estas linhas querem dizer:

"Não entendi isso
ls /home/backup/ > /home/backup/lista # lista um caminho e joga para um arquivo
cat /home/backup/lista | while read linha;"

ls /home/backup/ # é o diretorio que vc especifica, no meu caso esta usando a pasta home do usuario backup
# o sinal de maior " > " joga qualquer saida para um determinado arquivo, subscrevendo caso exista informações neste arquivo, o >> ( 2 vezes) acrescenta, e 2> caso exista algum erro, são os mais usuais.

#depois do maior (no meu caso /home/backup/lista) é o caminho que vai salvar a saida do ls e o nome lista, o nome que eu dei para o meu arquivo. /caminho/nome_do_arquivo

#a proxima linha cat /home/backup/lista | while read linha;"

o comando é uma estrutura que le o arquivo linha a linha atraves do comando cat + read le com o read e joga temporariamente na variavel linha, que é utilizada algumas vezes com $ (cifrão, dolar, cifra, cada um chama de um jeito) e a "saida" temporaria linha, assim $linha.

espero não ter complicado, qualquer coisa responde ai.



7. Re: Shell Script [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 02/07/2009 - 16:14h

douglasfim, boa tarde.

até entendi o que esta acontecendo, mas não tenho conhecimento para te explicar o pq, mas o problema é causado pelo espaço em branco no nome do arquivo, Musica Electronica Here We Go-Kaylab.mp3

ABS


8. Re: Shell Script [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/07/2009 - 16:31h

hum, tendi

vlw msm

su script esta muito bem explicado =)

flw


9. Re: Shell Script [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/07/2009 - 17:10h

Bem, não sei se é isso que você queria, mas, segue um script feito por mim, com alguma formatação.

#!/bin/bash
ARQ=$(mcookie)
for i in $(ls ./ | sed 's/ /*/g'); do
if [ -d $(echo $i | sed 's/ /*/g') ]; then
echo "$i : é um diretorio"
else
echo "$i : é um arquivo comum ou um link"
fi
done >>/tmp/${ARQ}.txt
column -c 2 -t -s ':' /tmp/${ARQ}.txt
rm -f /tmp/${ARQ}.txt


10. Vlw galera!

Hugo Leonardo Costa Santos
hlcsantos

(usa Ubuntu)

Enviado em 02/07/2009 - 17:40h

Entendi galera!

Valeu pela força!!!
Qualquer outra dúvida que surja estarei aqui!
Estão de parabéns :D


11. Re: Shell Script [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/07/2009 - 17:49h

xD

marca como melhor resposta, aquela que vc usou para resolver seu problema

xD flw


12. Re: Shell Script [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 03/07/2009 - 12:30h

Galera, apenas para efeito didatico, pois já foi resolvido.

O problema realmente estava acontecendo por causa do espaço em branco, pois é entendido como uma quebra de linha.

Para resolver isto, podesse adicionar no começo do script a variavel IFS, mais informações, http://www.dicas-l.com.br/cantinhodoshell/cantinhodoshell_20070103.php


Que resolverá ficando assim:

#!/bin/sh

IFS="
";
ls /home/backup/ > /home/backup/lista
cat /home/backup/lista | while read linha; do
if [ -d /home/backup/$linha ]
then
echo $linha "eh pasta"
elif [ -f /home/backup/$linha ]
then
echo $linha arquivo
else
echo $linha "sei la o que eh"
sleep 1
fi

done

até mais...







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts