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

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

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


From: Rodolfo Coutinho
Subject: Re: [shell-script] Re: Saber se um arquivo é um arquivo texto.
Date: Wed, 17 Dec 2008 11:12:56 -0300

Dando uma estudada nos guides encontrados em http://tldp.org/, achei algo
interessante e resolvi postar aqui, somente para reforçar o que o MrBits
escreveu.

"The kernel distinguishes special and regular files. Special files are
mainly found in /dev and /proc. They differ from regular files in that way
that they hide an interface to a driver and not to a real (regular) file
that contains text or binary data. This is the UNIX philosophy and allows to
use normal read/write operations on every file."

Flw

-- 
Rodolfo Coutinho

Em 17/12/08, voyeg3r <address@hidden> escreveu:
>
>   O comando 'file' tem uma opção '-i'
> que retorna o 'mime-type' do arquivo, acho
> que combinando com outros comando vai dar certo!
>
> --- Em address@hidden <shell-script%40yahoogrupos.com.br>,
> MrBiTS <mrbits@...> escreveu
>
> >
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> >
> > > Acho que não me expliquei direito.
> > > Foi isso mesmo que eu quis mostrar, que arquivo regular != arquivo
> > > texto, portanto o que ele queria fazer, descobrir se é texto através
> > > do test -f, não é a solução.
> >
> > Em Unix, tudo são arquivos. Seu console é um arquivo. Sua impressora
> é um arquivo. Sua placa de rede é um arquivo. Seu teclado é um
> > arquivo. Se você tem um tablet, a tela com capacidade de
> reconhecimento de toque é um arquivo. E vamos assim até o fim dos tempos.
> > Há, entretanto, tipos de arquivos. Temos arquivos de dispositivos (
> /dev/tty1, /dev/sda1 ), arquivos diretórios ( /home ), arquivos
> > de socket ( /tmp/mysqld ), arquivos de links ( simbólicos ou não ),
> arquivos pipe ( ou FIFO ), arquivos de bloco, arquivos
> > regulares. Arquivos regulares são aqueles que não são diretórios,
> dispositivos, pipes, ou seja, que não possuem uma característica
> > especial. São os arquivos encontrados em maior número no sistema
> operacional.
> >
> > Podemos distinguí-los através do comando ls -F ou ls -l ( que eu
> prefiro ). Teríamos algo assim:
> >
> >
> > $ ls -l
> > srwxrwxrwx 1 root root 0 Dec 17 00:30 TargetPipe
> > - -rw-r--r-- 1 nobody nobody 0 Dec 17 05:13 temp1.csv
> > - -rw-r--r-- 1 nobody nobody 0 Dec 17 05:13 temp2.csv
> > drwxr-xr-x 2 nobody nobody 4096 Jun 11 2008 tmp
> >
> > A identificação do arquivo fica imediatamente antes dos bits de
> permissões ( que é outro assunto extenso e que, se você não tem
> > idéia do que significam, é melhor recomeçar seus estudos pelo arroz
> com feijão ). Temos na listagem, então, um arquivo socket ( a
> > linha começa com um "s" ), dois arquivos regulares ( a linha começa
> com "-" ) e um arquivo diretório ( a linha começa com "d" ).
> >
> > Ainda temos os tipos "l", "c", "p" e "b", para link, dispositivo,
> pipe e bloco.
> >
> > Portanto, como o Eri citou, o test -f não é solução para reconhecer
> um arquivo texto. Vejamos:
> >
> > $ file temp1.csv
> > temp1.csv: empty
> > $ if [ -f temp1.csv ] ; then echo OK ; else echo NOK ; fi
> > OK
> >
> > O arquivo tem uma "extensão" ( conceito errado em Unix, mas
> novamente outro assunto extenso ) .csv que, em outros ambientes, seria
> > reconhecida como um arquivo do MS-Excel. O comando file o reconheceu
> como "empty". Claro, não há dados no arquivo. Entretanto, o
> > test -f o reconheceu como um arquivo regular.
> >
> > Um exemplos interessantes:
> >
> > mrbits@rimmon:~$ file vigenere.sh
> > vigenere.sh: Bourne-Again shell script text executable
> >
> > mrbits@rimmon:~$ file test.db
> > test.db: SQLite 3.x database
> >
> > mrbits@rimmon:~$ file voo.pdf
> > voo.pdf: PDF document, version 1.4
> >
> > mrbits@rimmon:~$ mv voo.pdf voo
> > mrbits@rimmon:~$ file voo
> > voo: PDF document, version 1.4
> >
> > Essas linhas nos mostram que a "extensão" nada tem a ver como "tipo"
> do arquivo. Por outro lado, mostrou um arquivo que é um texto
> > executável, um script bash. Será que você considera isso um "arquivo
> texto" ? Ou será que você considera "arquivo texto" um
> > documento criado pelo MS-Word ? Talvez um criado pelo vi ?
> >
> > Só para confundir:
> >
> > mrbits@rimmon:~$ file teste.html
> > teste.html: ASCII text
> >
> > mrbits@rimmon:~$ file wmpinfo.xml
> > wmpinfo.xml: Little-endian UTF-16 Unicode character data, with CRLF,
> CR line terminators
> >
> > Estranho esse arquivo wmpinfo.xml. Vamos lê-lo:
> >
> > mrbits@rimmon:~$ less wmpinfo.xml
> > "wmpinfo.xml" may be a binary file. See it anyway?
> >
> > Ele é "binário" porquê foi criptografado por mim, mas na verdade é
> um arquivo texto.
> >
> > Portanto, o primeiro ponto é definir O QUE É um arquivo texto para
> você. Se for o documento do MS-Word e você procurar por "text" ou
> > "ascii" na definição do comando file, não funcionará. Veja:
> >
> > mrbits@rimmon:~$ file Teste.doc
> > Teste.doc: Microsoft Office Document Microsoft Word Document
> >
> > - --
> >
> > Um abraço
> >
> > .0. MrBiTs - mrbits@...
> > ..0 GnuPG -
> http://keys.cardboard.net:11371/pks/lookup?op=get&search=0xAC37715A6DD1F186
> > 000 http://www.mrbits.com.br
> >
> >
> > -----BEGIN PGP SIGNATURE-----
> > Version: GnuPG v1.4.9 (GNU/Linux)
> >
> > iEYEARECAAYFAklIwy0ACgkQrDdxWm3R8YbdGQCfY0VviXxW1C1jIdKcjzgx0FQo
> > PMoAmQEBbXJEylX3mHEF5RXAm8+ZdrEW
> > =Yl+U
> > -----END PGP SIGNATURE-----
> >
>
>  
>


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



reply via email to

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