Tôi muốn một lệnh Linux để tìm các tệp đã thay đổi trong những n
giâ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?
Tôi muốn một lệnh Linux để tìm các tệp đã thay đổi trong những n
giâ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:
Sử dụng lệnh find như thế này:
find . -name "*.txt" -mtime -60s
Để tìm tất cả *.txt
các tệp được sửa đổi trong 60 giây qua.
-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ố -mtime
là một số chỉ định số lượng thời gian 24 giờ trước khi tệp được sửa đổi.
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
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.
Cách đơn giản nhất để làm điều này là:
find . -name "*.txt" -newermt '6 seconds ago'
Các -mtime -60s
tù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. -newermt
là 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 mmin
là:
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 find
phiên bản.
Nếu bạn đang theo dõi một thư mục để thay đổi các tệp, có lẽ bạn muốn sử dụng các công cụ inotify thay vì một vòng lặp bỏ phiếu vô hạn.
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ụngs
làm đối số.