2009-02-04 31 views

Trả lời

23

Nhìn vào inotify.

Với thông tin chi tiết, bạn có thể xem thư mục để tạo tệp.

+3

Inotify không hỗ trợ đệ quy xem các thư mục, nghĩa là phải có đồng hồ inotify riêng biệt cho mỗi thư mục con. Giữ nó trong tâm trí. – Jason

+0

Ngoài ra, hãy xem gói có tên [incron] (http://inotify.aiken.cz/?section=incron&page=why) và [man page] của nó (http://linux.die.net/man/5/incrontab). Tôi không chắc nó xử lý các thư mục con như thế nào. – BeowulfNode42

+0

Không, incron không xử lý các thư mục con, nó hoàn toàn thất bại trên một chiến dịch "indiegogo" thích hợp, và incron ngủ gật trong năm 2012. Buồn, nhưng nó đã đến một con hẻm mù. Tôi thực sự hy vọng, inotify sẽ ở lại ;-) – Frunsi

0

Một giải pháp mà tôi nghĩ là tạo một trình nghe "tệp" cùng với một công việc định kỳ. Tôi không điên về điều này nhưng tôi nghĩ nó có thể hoạt động.

+0

Nếu bạn muốn xử lý chúng càng sớm càng tốt, không có cách nào xung quanh sự không đồng nhất. –

0

fschange (Linux File System Change Notification) là một giải pháp hoàn hảo, nhưng nó cần phải patch kernel

+4

Lưu ý cảnh báo ở đầu bài viết, '' 'fschange là một thay thế cho inotify rằng [đã] được thực hiện trước khi inotify trở thành một phần của hạt nhân Linux chính. '' ' – TechplexEngineer

25

Đầu tiên chắc chắn inotify-tools trong cài đặt.

Sau đó sử dụng chúng như thế này:

logOfChanges="/tmp/changes.log.csv" # Set your file name here. 

# Lock and load 
inotifywait -mrcq $DIR > "$logOfChanges" & 
IN_PID=$$ 

# Do your stuff here 
... 

# Kill and analyze 
kill $IN_PID 
while read entry; do 
    # Split your CSV, but beware that file names may contain spaces too. 
    # Just look up how to parse CSV with bash. :) 
    path=... 
    event=... 
    ... # Other stuff like time stamps? 
    # Depending on the event… 
    case "$event" in 
    SOME_EVENT) myHandlingCode path ;; 
    ... 
    *) myDefaultHandlingCode path ;; 
done < "$logOfChanges" 

Ngoài ra, sử dụng --format thay vì -c trên inotifywait sẽ là một ý tưởng.

Chỉ man inotifywaitman inotifywatch để biết thêm thông tin.

Bạn cũng có thể sử dụng incron và sử dụng nó để gọi tập lệnh xử lý.

+1

Cảm ơn, câu trả lời tốt nhất cho đến nay. Tôi đã chắc chắn có một cái gì đó tiện lợi với inotify và điều này là chính xác it.Works giống như một say mê. – akostadinov

Các vấn đề liên quan