Anda dapat menulis skrip yang memanggil file
, dan menggunakan pernyataan kasus untuk memeriksa kasus yang Anda minati.
Sebagai contoh
#!/bin/sh
case $(file "$1") in
(*script*|*\ text|*\ text\ *)
echo text
;;
(*)
echo binary
;;
esac
walaupun tentu saja mungkin ada banyak kasus khusus yang menarik. Hanya memeriksa strings
salinan libmagic
, saya melihat sekitar 200 kasus, misalnya,
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
Beberapa menggunakan string "teks" sebagai bagian dari tipe yang berbeda, misalnya,
SoftQuad troff Context intermediate
SoftQuad troff Context intermediate for AT&T 495 laser printer
SoftQuad troff Context intermediate for HP LaserJet
juga script
bisa menjadi bagian dari kata, tetapi saya tidak melihat masalah dalam hal ini. Tetapi skrip harus memeriksa "text"
sebagai kata , bukan substring .
Sebagai pengingat, file
output tidak menggunakan deskripsi yang tepat yang akan selalu memiliki "skrip" atau "teks". Kasus khusus adalah sesuatu yang perlu dipertimbangkan. Tindak lanjut berkomentar bahwa --mime-type
bekerja sementara pendekatan ini tidak, untuk .svg
file. Namun, dalam tes saya melihat hasil ini untuk file 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
yang saya pilih setelah melihat seribu file hanya menampilkan 6 dengan "teks" di output tipe mime. Bisa dibilang, mencocokkan "xml" di akhir output tipe mime bisa lebih bermanfaat, katakanlah, daripada mencocokkan "SVG", tetapi menggunakan skrip untuk melakukan itu akan membawa Anda kembali ke saran yang dibuat di sini.
Output dari file
memerlukan beberapa penyetelan dalam skenario baik, dan tidak 100% dapat diandalkan (itu bingung oleh beberapa skrip Perl saya, menyebutnya "data").
Ada lebih dari satu implementasi dari file
. Yang paling umum digunakan melakukan tugasnya libmagic
, yang dapat digunakan dari program yang berbeda (mungkin tidak langsung dari zsh
, meskipun python
bisa).
Menurut tabel perbandingan uji file untuk shell, Perl, Ruby, dan Python , Perl memiliki -T
opsi yang dapat digunakan untuk memberikan informasi ini. Tapi itu tidak mencantumkan daftar fitur yang sebanding zsh
.
Bacaan lebih lanjut:
file
adalah utilitas standar dan dapat dijalankan melalui sihir file untuk menentukan jenis file dengan kemampuan terbaiknya. Ini dapat memberitahu sebagian besar format teks dan melakukan pekerjaan yang cukup baik pada format biner. Jika semua yang Anda coba lakukan adalah mencari tahu apakah suatu file adalah teks atau bukan, itulah perintah yang Anda minati.