Çağrılan bir komut dosyası yazabilir file
ve ilgilendiğiniz davaları kontrol etmek için bir vaka ifadesi kullanabilirsiniz.
Örneğin
#!/bin/sh
case $(file "$1") in
(*script*|*\ text|*\ text\ *)
echo text
;;
(*)
echo binary
;;
esac
Tabii ki ilgilenilen birçok özel durum olabilir. Sadece strings
bir kopyasını kontrol libmagic
ediyorum, yaklaşık 200 vaka görüyorum, örneğin,
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
Bazıları "text" dizesini farklı bir türün parçası olarak kullanır;
SoftQuad troff Context intermediate
SoftQuad troff Context intermediate for AT&T 495 laser printer
SoftQuad troff Context intermediate for HP LaserJet
Aynı şekilde script
bir kelimenin parçası olabilir, ama bu durumda hiçbir sorun görmüyorum. Ancak bir script "text"
bir kelime olarak değil, bir alt kelimeyi kontrol etmelidir .
Hatırlatma olarak, file
çıktı her zaman "script" veya "text" içerecek kesin bir açıklama kullanmaz. Özel durumlar, dikkate alınması gereken bir şeydir. Bir takip --mime-type
, .svg
dosyalar için bu yaklaşımın işe yaramayacağını belirtti . Bununla birlikte, bir testte svg dosyaları için şu sonuçları görüyorum:
$ 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
Binlerce dosyayı gördükten sonra seçtiğim mime tipi çıktıda sadece "text" yazısını gösteriyor. Muhtemelen, mime tipi çıktının sonunda "xml" yi eşleştirmek, "SVG" yi eşleştirmek yerine daha yararlı olabilir, ancak bunu yapmak için bir komut dosyası kullanmak , sizi burada yapılan öneriye geri götürür.
Her file
iki senaryoda da bazı ayarlamalar yapılmasını gerektirir ve% 100 güvenilir değildir (bazı Perl komut dosyalarım tarafından karıştırılır, bunları "veri" olarak adlandırır).
Birden fazla uygulaması var file
. En sık kullanılanı, libmagic
farklı programlardan (belki de doğrudan zsh
olsa python
da değil) kullanılabilecek çalışmalarını yapar.
Göre kabuk, Perl, Ruby ve Python için dosya testi karşılaştırma tablosu , Perl bir vardır -T
bu bilgileri sağlamak için kullanabilir seçeneği. Ancak bunun için karşılaştırılabilir bir özellik yok zsh
.
Daha fazla okuma:
file
Standart bir yardımcı programdır ve dosya türlerini yeteneklerinden en iyi şekilde belirlemek için dosya sihirbazını çalıştırabilir. Çoğu metin formatını söyleyebilir ve ikili formatlarda oldukça iyi bir iş çıkarır. Yapmaya çalıştığınız tek şey bir dosyanın metin olup olmadığını