Tìm tệp mới hơn 15 giây nhưng cũ hơn 2 giây


17

Tôi muốn tìm tệp mới hơn 15 giây nhưng cũ hơn 2 giây. Đây là tập lệnh tôi hiện đang sử dụng để lấy các tệp mới hơn 15 giây:

find /my/directory -name '*.jpg' -not -newermt '-15 seconds'

Bất kỳ trợ giúp nào cũng được đánh giá rất cao


2
Bạn đang sử dụng hệ điều hành nào? Có sự khác biệt trong việc findthực hiện.
terdon

Một tập tin nên được sửa đổi chính xác 2 giây trước phù hợp? Điều gì về một tập tin được sửa đổi chính xác 15 giây trước?
Mikel

Mới hơn 2 giây tại thời điểm tập lệnh bắt đầu hoặc tại thời điểm tập lệnh kết thúc?
Stéphane Chazelas

@Mikel, điều đó có lẽ không liên quan vì đồng hồ có độ phân giải nano giây hiện nay.
Stéphane Chazelas

1
Ok ... vì không ai khác hỏi ... @ Yllier123 tại sao bạn cần tìm các tệp được tạo trong khoảng 2 <x <15 giây? Tôi chỉ tò mò thôi.
C Bauer

Câu trả lời:


17

Bạn có thể kết hợp nhiều vị ngữ bằng cách xâu chuỗi chúng.

Không có -oldermt, nhưng bạn có thể viết như là -not -newermt.

Bạn muốn:

  • -newermt '-15 seconds' để nói rằng tệp chưa đầy 15 giây và
  • -not -newermt '-2 seconds' để nói rằng tập tin đã hơn 2 giây

Thử:

find /my/directory -newermt '-15 seconds' -not -newermt '-2 seconds'

Hoặc, để tuân thủ POSIX:

find /my/directory -newermt '-15 seconds' \! -newermt '-2 seconds'

Ngoài ra, chỉ để bạn (và những người đọc khác) biết, "mới hơn" có nghĩa là được sửa đổi gần đây hơn, không được tạo gần đây hơn.


3
Đẹp. Lưu ý rằng -not -newermt '-2 seconds'cũng sẽ khớp các tệp chính xác 2 giây cũ. Sử dụng -not -newermt '3 seconds'để loại trừ những người là tốt.
terdon

1
Vâng, các trường hợp cạnh luôn luôn vui vẻ. Tôi thực sự không chắc nó sử dụng độ phân giải nào cho những so sánh này. Giả định của tôi là mọi thứ được sửa đổi ~ 2.000000001 giây trước là khớp, nhưng điều đó cũng phụ thuộc vào hệ thống tệp và hệ điều hành của bạn.
Mikel

Điểm tốt, tôi không biết độ phân giải là gì. Tôi chỉ thử nghiệm với touch -d "2 seconds ago" file; find . -newermt '-15 seconds' -not -newermt '-2 seconds'và có file.
terdon

@terdon Chà, điều đó phụ thuộc vào việc dấu thời gian có độ phân giải chính xác hơn một giây hay không; điều đó sẽ phụ thuộc vào hệ thống, hệ thống tệp và thậm chí có thể khác nhau giữa các tệp trên cùng một hệ thống tệp nếu được sử dụng bởi nhiều máy khác nhau.
Blacklight Shining

"Mới hơn" có nghĩa là "gần đây hơn". Đó là "m" có nghĩa là "sửa đổi".
OrangeDog

4

Bạn đã không đề cập đến hệ điều hành của bạn ....

Điều này hoạt động tốt với một triển khai tìm kiếm hiện đại như một triển khai từ FreeBSD hoặc với sfind.

find /my/directory -name '*.jpg' -mtime -15s -mtime +2s

Sfind là một phần của công cụ Schily: http://sourceforge.net/projects/schilytools/files/

CẢNH BÁO: Tôi vừa phát hiện ra một vấn đề trong sfind. Nếu các -mtimeđối số nhỏ hơn 60 giây, nó sẽ không hoạt động chính xác vì thời gian tệp hiện được so sánh với dấu thời gian 60 giây trong tương lai ban đầu được tính cho chuyển đổi năm -ls.

BTW: -notkhông thuộc về find, nó là một GNUism không di động.


1
bashthẻ Thẻ Vì vậy, môi trường có thể là Cygwin, Debian GNU / Hurd, bashchạy trên FreeBSD hoặc Solaris,
săn

Đối với GNU find, có vẻ như số thập phân, mặc dù điên, có thể được sử dụng như một cách giải quyết.
Arthur2e5

Tìm POSIX không có !-không như! expression . Vì vậy, không có vấn đề lớn.

@phk Đây là lý do tại sao tôi đã đề cập đến phương pháp hoạt động với một tiêu chuẩn nâng cao primarytừ findđể thông báo cho mọi người rằng không cần phải luôn luôn thêm mới primariesđể tìm thấy để có thể tăng cường chức năng. BTW: Một bản sửa lỗi libfindđã được xuất bản trong schily tools.
schily

@BinaryZebra vấn đề là gfindđã thêm -notbí danh nào cả. Nó không bao giờ cần thiết và sự hiện diện của nó có thể được coi là một khóa nhà cung cấp trong chiến lược.
schily
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.