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 [email protected], MrBiTS <mrb...@...> 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: > > mrb...@rimmon:~$ file vigenere.sh > vigenere.sh: Bourne-Again shell script text executable > > mrb...@rimmon:~$ file test.db > test.db: SQLite 3.x database > > mrb...@rimmon:~$ file voo.pdf > voo.pdf: PDF document, version 1.4 > > mrb...@rimmon:~$ mv voo.pdf voo > mrb...@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: > > mrb...@rimmon:~$ file teste.html > teste.html: ASCII text > > mrb...@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: > > mrb...@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: > > mrb...@rimmon:~$ file Teste.doc > Teste.doc: Microsoft Office Document Microsoft Word Document > > - -- > > Um abraço > > .0. MrBiTs - mrb...@... > ..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----- >
