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 <[email protected]> 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 [email protected] <shell-script%40yahoogrupos.com.br>, > 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----- > > > > > [As partes desta mensagem que não continham texto foram removidas]
