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

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

Re: Saber se um arquivo é um arquivo texto.


From: voyeg3r
Subject: Re: Saber se um arquivo é um arquivo texto.
Date: Wed, 17 Dec 2008 11:06:47 -0000
User-agent: eGroups-EW/0.82

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, 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-----
>




reply via email to

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