Làm cách nào tôi có thể thực hiện `find` find các tập tin theo thứ tự thời gian đảo ngược?


17

Tôi muốn tìm các tệp trong thư mục con được sắp xếp theo dấu thời gian (của việc tạo), với lần đầu tiên gần đây nhất.

Tôi đã xem trang người đàn ông nhưng dường như chỉ cho phép bạn lọc theo dấu thời gian chứ không phải sắp xếp theo dấu thời gian.

Những lựa chọn nào tôi có thể vượt qua findđể thực hiện điều này? Thay phiên, làm thế nào tôi có thể kết hợp nó với một công cụ khác, như sortsắp xếp theo dấu thời gian?


1
Bạn không thể thực findhiện bất cứ điều gì theo thứ tự được sắp xếp cụ thể, ngoài việc lựa chọn giữa tìm kiếm theo chiều sâu và tìm kiếm theo chiều rộng.
Jonathan Leffler

@ merlin2011, vui lòng xem lại lựa chọn câu trả lời của bạn ở đây - câu trả lời được chọn hiện tại là lỗi (sẽ tạo ra kết quả đầu ra không thực sự được sắp xếp chính xác) khi có nhiều tệp được tìm thấy findhơn một trường hợp ls.
Charles Duffy

@CharlesDuffy, Cảm ơn bạn đã lưu ý! Tôi đã cập nhật các câu trả lời được chấp nhận.
merlin2011

Câu trả lời:


32

Mặc dù giải pháp của Paul nói chung là ổn, nhưng nó liên quan đến nhiều I / O hơn là đơn giản:

find bin/ -type f -printf '%Ts\t%p\n' | sort -nr | cut -f2

Điều gì nếu findtrả về hàng triệu tệp? Không sắp xếp sẽ sắp xếp tất cả chúng thành một danh sách rất dài sao? Nó vẫn sẽ hiệu quả? (Thay vì sắp xếp từng thư mục một cách độc lập.)
Peter Mortensen

1
Không hoạt động với các ký tự vui nhộn trong tên tệp, như dòng mới
Boris Brodski

2
Điều này chỉ xứng đáng nhận xét về câu trả lời của user7385, nhưng tôi không có tiếng tăm để làm điều đó. find bin/ -type f -printf '%Ts\t%p\0' | sort -nrz | cut -f2 -z | xargs -0 lsCác phiên bản mới cutcó tùy chọn -z, vì vậy tên tệp có dòng mới sẽ hoạt động.
MattBlissett

Lượng I / O thậm chí không phải là lý do chính để thích câu trả lời này - tính chính xác là một sự khác biệt quan trọng hơn nhiều. Cách xargs -0 ls -ttiếp cận sẽ không hoạt động chính xác khi có rất nhiều tệp xargscần bắt đầu lsnhiều lần, nhưng cách tiếp cận này sẽ tiếp tục hoạt động.
Charles Duffy

@PeterMortensen, "sắp xếp tất cả chúng thành một danh sách rất dài" là cách duy nhất để sắp xếp chúng thực sự trả về kết quả chính xác. Ngoài ra, câu trả lời khác / được chấp nhận không "sắp xếp từng thư mục một cách độc lập" (nếu muốn chỉ sắp xếp một thư mục duy nhất mà không cần đệ quy, người ta có thể sử dụng -maxdepth 1trên find).
Charles Duffy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.