Você pode escrever um script que chame file
e usar uma instrução de caso para verificar os casos em que está interessado.
Por exemplo
#!/bin/sh
case $(file "$1") in
(*script*|*\ text|*\ text\ *)
echo text
;;
(*)
echo binary
;;
esac
embora, claro, possa haver muitos casos especiais que são de interesse. Apenas verificando strings
em uma cópia de libmagic
, vejo cerca de 200 casos, por exemplo,
Konqueror cookie text
Korn shell script text executable
LaTeX 2e document text
LaTeX document text
Linux Software Map entry text
Linux Software Map entry text (new format)
Linux kernel symbol map text
Lisp/Scheme program text
Lua script text executable
LyX document text
M3U playlist text
M4 macro processor script text
Alguns usam a string "text" como parte de um tipo diferente, por exemplo,
SoftQuad troff Context intermediate
SoftQuad troff Context intermediate for AT&T 495 laser printer
SoftQuad troff Context intermediate for HP LaserJet
da mesma forma, script
poderia ser parte de uma palavra, mas não vejo problemas neste caso. Mas um script deve verificar "text"
como palavra , não substring .
Como lembrete, file
output não usa uma descrição precisa que sempre teria "script" ou "texto". Casos especiais são algo a considerar. Um acompanhamento comentou que o --mime-type
funciona enquanto essa abordagem não funciona, para arquivos .svg
. No entanto, em um teste, vejo esses resultados para arquivos svg:
$ ls -l *.svg
-r--r--r-- 1 tom users 6679 Jul 26 2012 pumpkin_48x48.svg
-r--r--r-- 1 tom users 17372 Jul 30 2012 sink_48x48.svg
-r--r--r-- 1 tom users 5929 Jul 25 2012 vile_48x48.svg
-r--r--r-- 1 tom users 3553 Jul 28 2012 vile-mini.svg
$ file *.svg
pumpkin_48x48.svg: SVG Scalable Vector Graphics image
sink_48x48.svg: SVG Scalable Vector Graphics image
vile-mini.svg: SVG Scalable Vector Graphics image
vile_48x48.svg: SVG Scalable Vector Graphics image
$ file --mime-type *.svg
pumpkin_48x48.svg: image/svg+xml
sink_48x48.svg: image/svg+xml
vile-mini.svg: image/svg+xml
vile_48x48.svg: image/svg+xml
que eu selecionei depois de ver mil arquivos mostram apenas 6 com "texto"
na saída do tipo mime. Indiscutivelmente, combinar o "xml" no final da saída do tipo mime poderia ser mais útil, digamos, do que "SVG" correspondente, mas usar um script para fazer que o leve de volta à sugestão feita aqui.
A saída de file
requer algum ajuste em ambos os cenários e não é 100% confiável (é confundida por vários dos meus scripts Perl, chamando-os de "dados").
Existe mais de uma implementação de file
. O mais comumente usado é o seu trabalho em libmagic
, que pode ser usado a partir de programas diferentes (talvez não diretamente de zsh
, embora python
pode).
De acordo com a Tabela de comparação de testes de arquivos para shell, Perl, Ruby, e Python , o Perl tem uma opção -T
que pode ser usada para fornecer essas informações. Mas não lista nenhum recurso comparável para zsh
.
Leitura adicional: