2-3 arquivos por segundo testados com file
parecem muito lentos para mim. O file
efectua vários testes diferentes para tentar determinar o tipo de ficheiro. Como você está procurando um tipo específico de arquivo (sqlite) e não se importa em identificar todos os outros, é possível experimentar um arquivo sqlite conhecido para determinar qual teste realmente o identifica. Você pode então excluir os outros usando o sinalizador -e
e executar em seu conjunto de arquivos completo. Veja a página do manual :
-e, --exclude testname
Exclude the test named in testname from the list of tests made to
determine the file type. Valid test names are:
apptype
EMX application type (only on EMX).
text
Various types of text files (this test will try to guess the
text encoding, irrespective of the setting of the ‘encoding’
option).
encoding
Different text encodings for soft magic tests.
tokens
Looks for known tokens inside text files.
cdf
Prints details of Compound Document Files.
compress
Checks for, and looks inside, compressed files.
elf
Prints ELF file details.
soft
Consults magic files.
tar
Examines tar files.
Edit: Eu mesmo tentei alguns testes. Resumo:
- A aplicação do meu conselho com os sinalizadores certos pode acelerar
file
em cerca de 15%, para testes para determinar o sqlite. O que é algo, mas não a grande melhoria que eu esperava. - Seus testes de arquivo são muito lentos. Eu fiz 500 em uma máquina padrão no tempo que você fez 2-3. Você está com hardware lento ou verificando arquivos enormes, executando uma versão antiga de
file
ou ...? - Você deve manter o teste 'soft' para identificar com êxito um arquivo como sqlite.
Para um arquivo DB de sqlite de 16 MB, eu fiz:
#!/bin/bash
for i in {1..1000}
do
file sqllite_file.db | tail > out
done
Tempo na linha de comando:
~/tmp$ time ./test_file_times.sh; cat out
real 0m2.424s
user 0m0.040s
sys 0m0.288s
sqllite_file.db: SQLite 3.x database
Ao tentar o teste diferente, exclui, e assumindo que a determinação é feita com base em um único teste, é o teste 'soft' (ou seja, pesquisa de arquivo mágica) que identifica o arquivo. Por conseguinte, modifiquei o comando file
para excluir todos os outros testes:
file -e apptype -e ascii -e encoding -e tokens -e cdf -e compress -e elf -e tar sqllite_file.db | tail > out
Executando isso 1.000 vezes:
~/tmp$ time ./test_file_times.sh; cat out
real 0m2.119s
user 0m0.060s
sys 0m0.280s
sqllite_file.db: SQLite 3.x database