shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Saber se um arquivo é um arquivo texto.


From: Elder Marco
Subject: Re: [shell-script] Saber se um arquivo é um arquivo texto.
Date: Thu, 18 Dec 2008 14:12:13 -0200

Eu suspeitava que arquivo regular era mesmo diferente de arquivo texto, quer
dizer, um arquivo texto pode ser um arquivo regular, mas um arquivo regular
pode não ser um arquivo texto. A verdade é que a opção -f funcionaria em
qualquer arquivo texto, mas funcionaria também em outros e a intenção do
script é justamente proibir que ele tente abrir qualquer arquivo que não
seja texto. A minha definição de arquivo texto MrBits, é qualquer arquivo
que pode ser aberto no Vi, nano, gedit, etc... A idéia de usar o file -i
<arquivo> > grep "text/" não é boa  porque não funcionaria com scripts (e
outros, talvez). Veja dois exemplos, no estilo que você mencionou:

elder@fedora: ~ $ file script.sh
script.sh: Boushell.sh: Bourne-Again shell script text executable
elder@fedora: ~ $ file -i script.sh
script.sh: application/x-shellscript

Observe que eu poderia saber que o script era um arquivo texto com o comando
file script.sh | grep "text" no primeiro caso, mas não poderia saber se era
um arquivo texto com esse outro comando mencionado.

Vejamos um outro exemplo com o arquivo /etc/sudoers:

elder@fedora: ~ $ file /etc/sudoers
/etc/sudoers: regular file, no read permission

Nesse caso, não adianta procurar por algum "text" na saída do comando e foi
isso que me incomodou. A idéia do Júlio é interessante, mas nesse caso, não
haveria teste nenhum para saber se o arquivo é ou não texto. :-(

Me ocorreu no momento em que escrevo que a idéia de utilizar o file
<Arquivo> | grep "text" parece ser a melhor ( embora eu ainda ache isso uma
gambiarra) . Acho que o problema com o /etc/sudoers é porque este não tem
permissão de leitura e o file precisa ler ele de alguma maneira para saber o
tipo. Oras, se o arquivo não pode ser lido, eu nem preciso me preocupar em
abrir ele com o cat ou o less. Se eu desse permissão de leitura para ele,
acho que poderia conseguir alguma informação útil. Vou testar isso (estou
num PC sem permissões de root agora :-( ) e ver se "rola".

Abs.


2008/12/17 Jeferson A. Cassol <address@hidden>

>   file -i <arquivo> | grep "text/"
> ajuda em uma boa parte de arquivos....
>
> --
> --
> Jeferson A. Cassol
> 2008/12/17 Julio C. Neves <address@hidden <julio.neves%40gmail.com>
> >
>
>
> > Fala Elder,
> > troque o cat por strings. Se vc fizer strings arq.txt, ele te lista
> arq.txt
> > como se vc tivesse feito um cat, mas se vc fizer strings /bin/ls, ele só
> > listará alguns trechos legíveis, sem 'empepinar' o monitor.
> > --
> > Abração,
> > Julio
> > *Cursos de Shell e Zenity nos finais de semana:
> > - Em SP ligue (11) 2125-4747;
> > - Em DF ligue (61) 3223-3000;
> > - Turmas fechadas em outras cidades ligue (21) 8112-9988
> > *
> >
> > 2008/12/16 Elder Marco <address@hidden <eldermarco%40gmail.com><eldermarco%
> 40gmail.com>>
>
> >
> > > Olá,
> > >
> > > Bom, num dos meus primeiros scripts, eu decidi escrever algo que
> pudesse
> > me
> > > ser útil. Não raro, dou um cat em um arquivo texto para saber seu
> > conteúdo,
> > > mas preciso usar algumas opções do cat (como mostrar o número da linha)
> > ou
> > > conectar a saída do comando para o less. De vez em quando eu também dou
> > um
> > > vacilo e acabo dando um cat em um arquivo que não é texto ... :(
> > >
> > > Então decidi fazer um script que recebe um ou dois parâmetros. Se
> receber
> > > dois, o primeiro será um parâmetro para o comando cat ou um comando que
> > > envia a saída dele para o lesse e o segundo será o arquivo que deve ser
> > > lido. O que eu preciso saber, além de outras coisas, é se esse arquivo
> é
> > ou
> > > não um arquivo texto. Primeiramente pensei em inserir algo da seguinte
> > > maneira:
> > >
> > > if [ ! -n $(file $ARQUIVO | grep text ) ; then
> > > echo "$ARQUIVO não é um arquivo texto "
> > > exit 1
> > > fi
> > >
> > > (eu não fechei o if acima porque esse bendito teclado aqui está
> > > desconfigurado no momento em que escrevo e não consigo achar a tecla
> que
> > > fecha os colchetes!)
> > >
> > > No entanto, eu percebi que isso nem sempre pode funcionar pois o
> comando
> > > file pode lidar com algum arquivo texto e não necessariamente ter um
> > "text"
> > > na sua saída (por exemplo, o /etc/sudoers no Fedora 8). E convenhamos,
> > isso
> > > é muita gambiarra não é? :-)
> > >
> > > Uma opção que achei útil --- e é aqui que está a minha dúvida --- é a
> > opção
> > > -f do comando test que verifica se um arquivo é um arquivo regular.
> > >
> > > O que significa exatamente um arquivo ser um arquivo regular? Eu
> poderia
> > > utilizar isso para saber se o arquivo é ou não um arquivo texto (e
> > portanto
> > > poderia ser lido com o cat)? Ou existe uma forma mais elegante de saber
> > > isso?
> > >
> > > Abs
> > >
> > > --
> > > Elder Marco
> > >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Elder Marco

Linux User: #471180

"O conhecimento é tristeza: aqueles que mais sabem são os que mais
profundamente devem lamentar a mais fatal verdade, a árvore do conhecimento
não é a da vida." (Versos extraídos da tragédia Manfred, de Byron e citado
por Nietzsche em "Humano, demasiado humano")


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]