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