คุณสามารถเขียนสคริปต์ที่โทรfile
และใช้คำสั่งกรณีและปัญหาเพื่อตรวจสอบกรณีที่คุณสนใจ
ตัวอย่างเช่น
#!/bin/sh
case $(file "$1") in
(*script*|*\ text|*\ text\ *)
echo text
;;
(*)
echo binary
;;
esac
แม้ว่าแน่นอนอาจมีหลายกรณีที่น่าสนใจ เพียงตรวจสอบstrings
บนสำเนาของlibmagic
ฉันเห็นประมาณ 200 กรณีเช่น
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
บางคนใช้สตริง "ข้อความ" เป็นส่วนหนึ่งของประเภทที่แตกต่างกันเช่น
SoftQuad troff Context intermediate
SoftQuad troff Context intermediate for AT&T 495 laser printer
SoftQuad troff Context intermediate for HP LaserJet
เช่นเดียวกันscript
อาจเป็นส่วนหนึ่งของคำ แต่ฉันไม่เห็นปัญหาในกรณีนี้ แต่สคริปต์ควรตรวจสอบ"text"
ว่าเป็นคำที่ไม่ย่อย
เพื่อเป็นการเตือนความจำfile
เอาต์พุตไม่ใช้คำอธิบายที่แม่นยำซึ่งมักจะมี "สคริปต์" หรือ "ข้อความ" กรณีพิเศษเป็นสิ่งที่ต้องพิจารณา ผู้ติดตามแสดงความคิดเห็นว่าการ--mime-type
ทำงานในขณะที่วิธีการนี้จะไม่สำหรับ.svg
ไฟล์ อย่างไรก็ตามในการทดสอบฉันเห็นผลลัพธ์เหล่านี้สำหรับไฟล์ 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
ซึ่งฉันเลือกหลังจากที่เห็นไฟล์พันไฟล์แสดงเพียง 6 กับ "ข้อความ" ในผลลัพธ์ประเภท mime การจับคู่ "xml" ที่ส่วนท้ายของเอาต์พุต mime-type อาจมีประโยชน์มากกว่าพูดตรงกับ "SVG" แต่การใช้สคริปต์เพื่อทำสิ่งนั้นจะนำคุณกลับไปสู่คำแนะนำที่ทำไว้ที่นี่
ผลลัพธ์ของfile
ต้องมีการปรับแต่งในบางสถานการณ์และไม่น่าเชื่อถือ 100% (มันสับสนโดยสคริปต์ Perl หลายตัวของฉันเรียกพวกเขาว่า "ข้อมูล")
มีการนำไปปฏิบัติมากกว่าหนึ่งfile
รายการ หนึ่งที่ใช้บ่อยที่สุดทำงานในlibmagic
ซึ่งสามารถใช้จากโปรแกรมที่แตกต่างกัน (อาจจะไม่โดยตรงจากzsh
แต่python
สามารถ)
ตามตารางเปรียบเทียบการทดสอบไฟล์สำหรับเชลล์, Perl, Ruby และ Python , Perl มี-T
ตัวเลือกที่สามารถใช้เพื่อให้ข้อมูลนี้ zsh
แต่มันแสดงรายการคุณลักษณะไม่มีเทียบเคียง
อ่านเพิ่มเติม:
file
เป็นยูทิลิตี้มาตรฐานและสามารถเรียกใช้ไฟล์มายากลเพื่อกำหนดประเภทไฟล์ให้ดีที่สุดในความสามารถของมัน มันสามารถบอกรูปแบบข้อความส่วนใหญ่และทำงานได้ค่อนข้างดีในรูปแบบไบนารี หากสิ่งที่คุณกำลังพยายามที่จะทำคือการค้นหาว่าไฟล์ที่เป็นข้อความหรือไม่ว่าเป็นคำสั่งที่คุณกำลังสนใจในการ.