Bạn có thể viết một tập lệnh gọi file
và sử dụng câu lệnh tình huống để kiểm tra các trường hợp bạn quan tâm.
Ví dụ
#!/bin/sh
case $(file "$1") in
(*script*|*\ text|*\ text\ *)
echo text
;;
(*)
echo binary
;;
esac
mặc dù tất nhiên có thể có nhiều trường hợp đặc biệt được quan tâm. Chỉ cần kiểm tra strings
một bản sao libmagic
, tôi thấy khoảng 200 trường hợp, ví dụ,
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
Một số sử dụng chuỗi "văn bản" như một phần của một loại khác, ví dụ:
SoftQuad troff Context intermediate
SoftQuad troff Context intermediate for AT&T 495 laser printer
SoftQuad troff Context intermediate for HP LaserJet
tương tự như vậy script
có thể là một phần của một từ, nhưng tôi thấy không có vấn đề gì trong trường hợp này. Nhưng một kịch bản nên kiểm tra "text"
dưới dạng một từ , không phải là một chuỗi con .
Xin nhắc lại, file
đầu ra không sử dụng một mô tả chính xác sẽ luôn có "tập lệnh" hoặc "văn bản". Trường hợp đặc biệt là một cái gì đó để xem xét. Một người theo dõi đã nhận xét rằng các --mime-type
công việc trong khi phương pháp này sẽ không, đối với .svg
các tệp. Tuy nhiên, trong một thử nghiệm tôi thấy các kết quả này cho các tập tin 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
mà tôi đã chọn sau khi thấy một nghìn tệp chỉ hiển thị 6 với "văn bản" trong đầu ra kiểu mime. Có thể cho rằng, khớp "xml" ở cuối đầu ra kiểu mime có thể hữu ích hơn so với so khớp "SVG", nhưng sử dụng tập lệnh để thực hiện điều đó đưa bạn trở lại đề xuất được đưa ra ở đây.
Đầu ra của file
yêu cầu một số điều chỉnh trong một trong hai kịch bản và không đáng tin cậy 100% (nó bị nhầm lẫn bởi một số tập lệnh Perl của tôi, gọi chúng là "dữ liệu").
Có nhiều hơn một thực hiện file
. Một công cụ được sử dụng phổ biến nhất thực hiện công việc của nó libmagic
, có thể được sử dụng từ các chương trình khác nhau (có lẽ không trực tiếp từ zsh
, mặc dù python
có thể).
Theo bảng so sánh kiểm tra tệp cho shell, Perl, Ruby và Python , Perl có một -T
tùy chọn mà nó có thể sử dụng để cung cấp thông tin này. Nhưng nó liệt kê không có tính năng so sánh cho zsh
.
Đọc thêm:
file
là một tiện ích tiêu chuẩn và có thể chạy qua ma thuật tệp để xác định loại tệp theo khả năng tốt nhất của nó. Nó có thể cho hầu hết các định dạng văn bản và thực hiện một công việc khá tốt trên các định dạng nhị phân. Nếu tất cả những gì bạn đang cố gắng làm là tìm hiểu xem một tập tin có phải là văn bản hay không, đó là lệnh bạn quan tâm.