Lệnh Linux để tìm các tệp đã thay đổi trong n giây qua


19

Tôi muốn một lệnh Linux để tìm các tệp đã thay đổi trong những ngiây cuối cùng .

Có tập lệnh shell hay công cụ nào khác mà tôi có thể chạy từ giao diện dòng lệnh hoặc GUI không?

Câu trả lời:


14

Sử dụng lệnh find như thế này:

find . -name "*.txt" -mtime -60s

Để tìm tất cả *.txtcác tệp được sửa đổi trong 60 giây qua.


17
Trong linux, sử dụng find (từ GNU findutils 4.4.2), tôi gặp lỗi với lệnh này : find: missing argument to `-mtime'. Tuy nhiên, tôi có thể có được hành vi mong muốn bằng cách sử dụng -mmin và đối số thập phân. Tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào trong trang tìm kiếm để sử dụng slàm đối số.
dr jimbob

4
-60 không phải là một đối số hợp lệ để -mtime. Cũng không phải là "60s" thậm chí là một tùy chọn hợp lệ trong POSIX hoặc GNU find. Đối số -mtimelà một số chỉ định số lượng thời gian 24 giờ trước khi tệp được sửa đổi.
dannysauer

13

Giải pháp với mtime chỉ định giây không hoạt động trên các hệ thống linux của tôi sử dụng find --version== find (GNU findutils) 4.4.2.

Tôi nhận được lỗi sau đây:

mycomputer:~/new$ find . -mtime -60s
find: missing argument to `-mtime'
mycomputer:~/new$ find . -mtime -60seconds
find: missing argument to `-mtime'

Tuy nhiên, tôi có thể sử dụng -mmin(để sửa đổi trong m phút cuối) và có thể sử dụng đối số thập phân; ví dụ: các mục sau đây tìm thấy các tệp được sửa đổi trong 30 giây qua.

find . -mmin 0.5

Ví dụ; tạo tập tin được sửa đổi lần cuối 1s, 6s, 11, ... trước đây trong 120 giây, lệnh này tìm thấy:

mycomputer:~/new$ for i in $(seq 1 5 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
mycomputer:~/new$ find . -mmin 0.5
.
./last_modified_1_seconds_ago
./last_modified_26_seconds_ago
./last_modified_11_seconds_ago
./last_modified_16_seconds_ago
./last_modified_21_seconds_ago
./last_modified_6_seconds_ago

Vì vậy, nếu bạn thực sự cần nó trong vài giây, bạn có thể làm một cái gì đó như:

localhost:~/new$ for i in $(seq 1 1 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
localhost:~/new$ N=18; find . -mmin $(echo "$N/60"|bc -l)
./last_modified_1_seconds_ago
./last_modified_9_seconds_ago
./last_modified_14_seconds_ago
./last_modified_4_seconds_ago
./last_modified_12_seconds_ago
./last_modified_13_seconds_ago
./last_modified_8_seconds_ago
./last_modified_3_seconds_ago
./last_modified_5_seconds_ago
./last_modified_11_seconds_ago
./last_modified_17_seconds_ago
./last_modified_16_seconds_ago
./last_modified_7_seconds_ago
./last_modified_15_seconds_ago
./last_modified_10_seconds_ago
./last_modified_6_seconds_ago
./last_modified_2_seconds_ago

8

Tương tự như những gì glenn đề xuất, nếu bạn muốn tìm mọi thứ được sửa đổi, giả sử, trong thời gian mà quá trình cài đặt đang chạy, có thể dễ dàng thực hiện một việc như:

touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint

Sau đó, bạn không phải thực hiện tính toán thời gian; bạn chỉ cần tìm những thứ thay đổi sau khi tập tin điểm kiểm tra.


6

Nếu bạn có phiên bản tìm thấy không hỗ trợ -mtime -60sthì giải pháp tốt hơn là

touch -d '-60 seconds' /tmp/newerthan
find . -name "*.txt" -newer /tmp/newerthan

6

Cách đơn giản nhất để làm điều này là:

find . -name "*.txt" -newermt '6 seconds ago'

Các -mtime -60stùy chọn, đề cập đến trong một câu trả lời, không hoạt động trên nhiều phiên bản của find, ngay cả trong năm 2016. -newermtlà một lựa chọn tốt hơn nhiều cho chúng tôi. Nó có thể phân tích nhiều định dạng ngày và giờ khác nhau.

Một phương pháp khác sử dụng mminlà:

find . -name "*.txt" -mmin -0.5

# Finds files modified within the last 0.5 minute, i.e. last 30 seconds

Tùy chọn này có thể không hoạt động cho tất cả các findphiên bản.


2
Đây rõ ràng là giải pháp tốt nhất.
rednoah


1

Nếu phiên bản của findbạn không chấp nhận giây hoặc giá trị thực, giống như của tôi, hãy sử dụng -mmin, nhưng chỉ định 0 và bạn sẽ nhận được tất cả các tệp được sửa đổi trong vòng chưa đầy một phút:

$ touch test; find . -type f -mmin 0
./test
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.