[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]
- Re: [shell-script] Saber se um arquivo é um arquivo texto., (continued)
Re: [shell-script] Saber se um arquivo é um arquivo texto., Antônio Flávio, 2008/12/16
Re: [shell-script] Saber se um arquivo é um arquivo texto., Julio C. Neves, 2008/12/17