2013-01-24 21 views
5

Tôi muốn tìm các tệp có thể đọc được trên máy linux của tôi mà không có ràng buộc mở rộng tệp. Các tệp đó phải có các tệp cảm biến của con người như văn bản, cấu hình, html, tệp mã nguồn, v.v. Bạn có thể đề xuất một cách để lọc và định vị.Tìm tệp có thể đọc được trên unix

+1

Tiện ích 'file' khá tốt trong việc xác định loại nội dung trong một tệp. Có lẽ bạn có thể sử dụng và lọc các tập tin dựa trên đầu ra của nó. – cdhowie

+0

AFAIK chỉ Windows tin tưởng phần mở rộng tập tin. Các hệ điều hành giống UNIX sử dụng 'file'. Dù sao, bạn phải định nghĩa "con người có thể đọc được". – m0skit0

+0

Chính xác điều này cần phải như thế nào? Và bạn đang tìm kiếm MỌI tệp trong hệ thống, hoặc chỉ trong một phần được chọn của hệ thống? Điều gì sẽ xảy ra nếu hệ thống có khoảng bảy terabytes đĩa được gắn vào, có thể chấp nhận để chờ vài giờ (vì đó là khoảng thời gian để đọc tất cả các tệp)? –

Trả lời

6

tìm và tập tin là bạn của bạn ở đây:

find /dir/to/search -type f -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print 

này sẽ tìm thấy bất kỳ file (Chú ý: nó sẽ không tìm thấy liên kết tượng trưng thư mục ổ cắm vv chỉ file thường xuyên) trong/dir/to/tìm kiếm và chạy sh - c 'file -b {} | văn bản grep &>/dev/null '\; xem xét loại tệp và tìm văn bản trong mô tả. nếu điều này trả về true (tức là văn bản nằm trong dòng) thì nó sẽ in tên tệp.

LƯU Ý: sử dụng cờ -b để ghi lại rằng tên tệp không được in và do đó không thể tạo bất kỳ vấn đề nào với grep. ví dụ như không có cờ-b, tệp nhị phân gettext sẽ được phát hiện sai dưới dạng tệp văn bản.

ví dụ

[email protected]# find /bin -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print 
/bin/gunzip 
/bin/svnshell.sh 
/bin/unicode_stop 
/bin/unicode_start 
/bin/zcat 
/bin/redhat_lsb_init 
[email protected]# find /bin -type f -name *text* 
/bin/gettext 

EDIT:

Nếu bạn muốn tìm kiếm trong các tập tin nén sử dụng cờ --uncompress nộp. để biết thêm và cờ để nộp thấy man file

+0

Tôi là người mới đối với hệ sinh thái giống như unix. Tại sao bạn sử dụng "&" ở cuối 'grep' của bạn? Sự hiểu biết của tôi là điều này sẽ làm cho grep chạy không đồng bộ. Điều này sẽ vẫn cung cấp trạng thái thoát để 'tìm'? Tại sao một người làm điều đó? Cảm ơn bạn đã dành thời gian để trả lời. –

10

Làm thế nào về

find /dir/to/search -type f | xargs file | grep text

find sẽ cung cấp cho bạn một danh sách các tập tin.

xargs file sẽ chạy lệnh file trên mỗi dòng từ đầu vào đường ống.

+0

Hoạt động hoàn hảo!Giải pháp tốt. – fuuman

-1

tôi sử dụng

file directory/to/search/* 

Ví dụ để tìm các tập tin chỉ có thể đọc được con người trong một thư mục gọi là sử dụng tại nhà:

file home/* 

và file có thể đọc được sẽ có định dạng như văn bản ASCII

+0

Điều này không cung cấp phương pháp để lọc tệp trừ khi quét thủ công các loại tệp. – blissfool