Sự kết hợp find
và ls
hoạ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 find
chú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 -print0
chúng ta có thể chuyển tất cả tên tệp một cách an toàn ls
như thế này:
find . -name "my-pattern" -print0 | xargs -r -0 ls -1 -t
find
tham 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 -t
sẽ 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 -1
cho 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á, xargs
sẽ gọi ls
nhiề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" -print0
nế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 xargs
việ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.