Sự kết hợp findvà lshoạt động tốt cho
- tên tập tin không có dòng mới
- số lượng tệp không quá lớn
- tên tập tin không dài
Giải pháp:
find . -name "my-pattern" -print0 |
xargs -r -0 ls -1 -t |
head -1
Hãy phá vỡ nó:
Với findchúng tôi có thể phù hợp với tất cả các tệp thú vị như thế này:
find . -name "my-pattern" ...
sau đó sử dụng -print0chúng ta có thể chuyển tất cả tên tệp một cách an toàn lsnhư thế này:
find . -name "my-pattern" -print0 | xargs -r -0 ls -1 -t
findtham số tìm kiếm bổ sung và các mẫu có thể được thêm vào đây
find . -name "my-pattern" ... -print0 | xargs -r -0 ls -1 -t
ls -tsẽ sắp xếp các tệp theo thời gian sửa đổi (mới nhất trước tiên) và in nó tại một dòng. Bạn có thể sử dụng -cđể sắp xếp theo thời gian tạo. Lưu ý : điều này sẽ phá vỡ với tên tệp có chứa dòng mới.
Cuối cùng, head -1cho chúng tôi tập tin đầu tiên trong danh sách được sắp xếp.
Lưu ý: xargs sử dụng giới hạn hệ thống theo kích thước của danh sách đối số. Nếu kích thước này vượt quá, xargssẽ gọi lsnhiều lần. Điều này sẽ phá vỡ sự sắp xếp và có lẽ cũng là đầu ra cuối cùng. Chạy
xargs --show-limits
để kiểm tra các giới hạn trên hệ thống của bạn.
Lưu ý 2: sử dụng find . -maxdepth 1 -name "my-pattern" -print0nếu bạn không muốn tìm kiếm tệp thông qua các thư mục con.
Lưu ý 3: Như được chỉ ra bởi @starfry - -rđối số cho xargsviệc ngăn chặn cuộc gọi của ls -1 -t, nếu không có tệp nào được khớp bởi find. Cảm ơn bạn đã suggesion.