2-3 Dateien pro Sekunde getestet mit file
scheint mir sehr langsam. file
führt tatsächlich eine Reihe verschiedener Tests durch, um den Dateityp zu bestimmen. Da Sie nach einem bestimmten Dateityp (SQLite) suchen und sich nicht darum kümmern, alle anderen zu identifizieren, können Sie mit einer bekannten SQLite-Datei experimentieren, um festzustellen, welcher Test sie tatsächlich identifiziert. Sie können dann die anderen mithilfe des -e
Flags ausschließen und für Ihren vollständigen Dateisatz ausführen. Siehe die Manpage :
-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: Ich habe selbst einige Tests ausprobiert. Zusammenfassung:
- Das Anwenden meines Ratschlags mit den richtigen Flags kann sich
file
bei Tests zur Bestimmung von SQLite um etwa 15% beschleunigen . Welches ist etwas, aber nicht die enorme Verbesserung, die ich erwartet hatte.
- Ihre Dateitests sind sehr langsam. Ich habe 500 auf einer Standardmaschine in der Zeit gemacht, in der Sie 2-3 gemacht haben. Sind Sie auf langsamer Hardware oder überprüfen Sie riesige Dateien, führen Sie eine alte Version von aus
file
oder ...?
- Sie müssen den "weichen" Test beibehalten, um eine Datei erfolgreich als SQLite zu identifizieren.
Für eine 16 MB SQLite-DB-Datei habe ich Folgendes getan:
#!/bin/bash
for i in {1..1000}
do
file sqllite_file.db | tail > out
done
Timing in der Kommandozeile:
~/tmp$ time ./test_file_times.sh; cat out
real 0m2.424s
user 0m0.040s
sys 0m0.288s
sqllite_file.db: SQLite 3.x database
Wenn Sie versuchen, die verschiedenen Tests auszuschließen, und vorausgesetzt, dass die Bestimmung auf der Grundlage eines einzelnen Tests erfolgt, ist es der "weiche" Test (dh die Suche nach magischen Dateien), der die Datei identifiziert. Dementsprechend habe ich den file
Befehl geändert , um alle anderen Tests auszuschließen:
file -e apptype -e ascii -e encoding -e tokens -e cdf -e compress -e elf -e tar sqllite_file.db | tail > out
1000 Mal ausgeführt:
~/tmp$ time ./test_file_times.sh; cat out
real 0m2.119s
user 0m0.060s
sys 0m0.280s
sqllite_file.db: SQLite 3.x database
file
laufen auf 2115 Dateien ohne spezielle Optionen0m0.117s user 0m0.078s sys 0m0.044s
für mich