Câu trả lời:
Trên các phiên bản gần đây của find
(ví dụ GNU 4.4.0), bạn có thể sử dụng -newermt
tùy chọn. Ví dụ: để tìm tất cả các tệp đã được sửa đổi vào ngày 2011/02/08
$ find /var/www/html/dir/ -type f -name "*.php" -newermt 2011-02-08 ! -newermt 2011-02-09
Cũng lưu ý rằng bạn không cần phải chuyển sang grep để tìm tệp php vì find có thể làm điều đó cho bạn trong -name
tùy chọn.
Hãy xem câu trả lời SO này để có thêm gợi ý: Cách sử dụng 'find' để tìm kiếm các tệp được tạo vào một ngày cụ thể?
Khó chịu, không có cách nào trực tiếp với tiêu chuẩn find
. Các phiên bản gần đây của find
hệ thống GNU (ví dụ: Linux không nhúng, Cygwin) và một số * BSD có các tùy chọn như -newermt
so sánh ngày của tệp với ngày được đánh vần .
Với tiêu chuẩn find
, tất cả những gì bạn có thể làm là so sánh ngày của tệp với ngày hiện tại ( -mtime
) hoặc với một tệp cố định. Ngày hiện tại thường không hữu ích trong trường hợp này (nó tính lại từ thời điểm bạn chạy find
lệnh, trong khi hầu hết các ứng dụng yêu cầu ngày theo lịch). Điều đó khiến bạn không có khả năng tạo các tệp tạm thời để xác định một phạm vi.
touch -t 201103070000 start.tmp
touch -t 201103080000 stop.tmp
find . -newer start.tmp \! -newer stop.tmp -print
rm start.tmp stop.tmp
Bạn đã có lệnh gần như đúng, đối với các phiên bản find
sẽ không cho phép bạn sử dụng ngày:
find /var/www/html/dir/ -mtime 27 | grep '\.php'
Nói chung, for find
- n có nghĩa là ít hơn , n có nghĩa là bằng nhau , + n có nghĩa là "nhiều hơn". Truyền thống find
có một số ngoại lệ, nhưng GNU find
và các phiên bản mới hơn khác như trên BSD / Mac OS X đã sửa các lỗi đó. (Hãy ghi nhớ điều này nếu bạn từng thấy mình trên Solaris hoặc hệ thống Unix thương mại khác.)
Với zsh
bạn có thể sử dụng chức năngage
để chỉ in tên của các tệp đã được sửa đổi vào một ngày nhất định:
tuổi tự động tải in -rl - * .php (.e: tuổi 2011/02/08 :)
hoặc, nếu bạn muốn tìm kiếm đệ quy:
tuổi tự động tải setopt Extendedglob in -rl - ** / *. php (.e: tuổi 2011/02/08 :)