2012-03-24 40 views
6

Lệnh 'tệp' của Unix có tùy chọn -0 để xuất một ký tự null sau tên tệp. Điều này được cho là tốt cho việc sử dụng với 'cắt'.Làm thế nào để 'cắt' trên null?

Từ man file:

-0, --print0 
     Output a null character ‘\0’ after the end of the filename. Nice 
     to cut(1) the output. This does not affect the separator which is 
     still printed. 

(. Chú ý, trên Linux của tôi, tách '-F' KHÔNG được in - có ý nghĩa hơn đối với tôi)

Làm thế nào bạn có thể sử dụng 'cắt' thế nào để trích xuất một tên tập tin từ đầu ra của 'tập tin'?

Đây là những gì tôi muốn làm:

find . "*" -type f | file -n0iNf - | cut -d<null> -f1 

nơi <null> là ký tự NUL.

Vâng, đó là những gì tôi đang cố gắng làm, những gì tôi muốn làm là lấy tất cả tên tệp từ cây thư mục có loại MIME cụ thể. Tôi sử dụng một grep (không được hiển thị).

Tôi muốn xử lý tất cả các tên tệp hợp pháp và không bị kẹt trên tên tệp có dấu hai chấm, ví dụ: trong tên của chúng. Do đó, NUL sẽ là tuyệt vời.

Tôi đoán các giải pháp không cắt cũng tốt, nhưng tôi không muốn từ bỏ một ý tưởng đơn giản.

Trả lời

9

Chỉ cần chỉ định một dấu phân cách trống:

cut -d '' -f1 

(NB: Khoảng cách giữa các -d'' là rất quan trọng, do đó -d và chuỗi rỗng có được thông qua như các đối số riêng biệt, nếu bạn viết -d'', sau đó sẽ được chuyển thành chỉ -d và sau đó cut sẽ cho rằng bạn đang cố gắng sử dụng -f1 làm dấu phân cách, mà nó sẽ khiếu nại, với thông báo lỗi "dấu phân tách phải là một ký tự đơn".)

+0

Đó là pr chỉ là điều tôi không thử! Cảm ơn! – philcolbourn

+0

@philcolbourn: Bạn được chào đón! – ruakh

+2

Tính năng này không hoạt động. 'cut: bad delimiter' (Mac OS X) – Sukima

Các vấn đề liên quan