Để được tư vấn chung về việc xử lý tên tệp có khả năng chứa khoảng trắng, hãy xem Tại sao tập lệnh shell của tôi bị nghẹt trên khoảng trắng hoặc các ký tự đặc biệt khác?
Khó khăn với những gì bạn đang cố gắng làm là không có cách nào hay để liệt kê N tệp gần đây nhất với các công cụ tiêu chuẩn.
Cách dễ nhất để làm những gì bạn đang làm ở đây là sử dụng zsh làm vỏ của bạn. Nó có vòng loại toàn cầu để sắp xếp các tập tin theo ngày. Để chạy file
trên 500 tệp gần đây nhất:
file *(om[1,500])
Với file
tiện ích Linux , vượt qua -i
hoặc --mime-type
tùy chọn để có được đầu ra dễ phân tích hơn. Các tập tin hình ảnh được xác định bởi các dòng kết thúc bằng image/something
.
file --mime-type *(om[1,500]) | sed -n 's~: *image/[^ ]*$~~p'
Nếu bạn cần đối phó hoàn toàn với tất cả các tên tệp, bao gồm cả những tên có dòng mới trong tên của chúng, hãy sử dụng -0
tùy chọn cho đầu ra được phân tách bằng null. Các phiên bản gần đây của GNU sed có thể sử dụng byte rỗng làm dấu phân cách bản ghi thay vì dòng mới.
file --mime-type -- *(om[1,500]) | sed -zn 's~: *image/[^ ]*$~~p'
Nếu bạn không có zsh, bạn có thể sử dụng ls
và đối phó với các tên tệp có chứa khoảng trắng nhưng không phải là dòng mới hoặc dấu cách bằng cách chuyển -L1
tùy chọn đến file
. Điều này được gọi file
trên một tệp tại một thời điểm, vì vậy nó hơi chậm.
ls -t | head -n 500 | xargs -L1 file --mime-type -- | sed -n 's~: *image/[^ ]*$~~p'
xargs
triển khai phổ biến , ví dụ, dấu phân cách có thể được thay đổi'\n'
. Điều này thường hữu ích khi đầu vào không được tạo bởifind
. Xem-d
(GNU) và-E
(OSX)