Linux cung cấp một giao diện đẹp để theo dõi tất cả các sự kiện hệ thống tệp như tạo, sửa đổi, xóa tệp. Giao diện là inotify
họ của các cuộc gọi hệ thống, các tiện ích không gian người dùng tận dụng các cuộc gọi này được cung cấp bởi inotify-tools
gói trong Ubuntu (có sẵn trên kho vũ trụ). Nếu bạn chưa có nó, hãy cài đặt bằng cách:
sudo apt-get install inotify-tools
inotify-tools
cung cấp inotifywait
và inotifywatch
nhị phân, chúng ta cần cái đầu tiên.
Vì vậy, bạn muốn chạy lệnh asciidoctor -q some_file
khi bất kỳ .adoc
tệp nào được sửa đổi ( some_file
sẽ được thay thế bởi điều đó), nếu vậy giả sử các .adoc
tệp của bạn nằm trong thư mục /foo/bar
, bạn có thể đặt đồng hồ:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-q
cho phép chế độ im lặng, không có thông tin từ inotifywait
chính nó
-m
cho phép chế độ màn hình, nếu không nó sẽ thoát sau sự kiện đầu tiên
--event modify
, chúng tôi chỉ quan tâm đến modify
sự kiện tức là khi một tệp được sửa đổi. Các giá trị khác có thể bao gồm open
, close
v.v.
--format %w
, chúng tôi chỉ muốn tên tệp được sửa đổi thay vì bó thông tin khác vì chúng tôi sẽ sử dụng tên tệp làm đầu vào cho lệnh khác
/foo/bar/*.adoc
sẽ được mở rộng cho tất cả .adoc
các tập tin trong /foo/bar
thư mục
Bây giờ ở trên sẽ hiển thị cho bạn tên tệp bất cứ khi nào được sửa đổi, bây giờ để chạy lệnh trên tên tệp (giả sử lệnh lấy đối số qua STDIN):
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
Bạn cũng có thể thiết lập đồng hồ đệ quy trên thư mục, sau đó bạn sẽ chỉ cần sử dụng grep
để lọc các tệp mong muốn. Ở đây thiết lập đồng hồ đệ quy ( -r
) trên thư mục /foo/bar
và sử dụng grep
để chỉ lọc .adoc
các tệp:
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
Khi xem các thư mục, bộ xác định định dạng đầu ra %w
sẽ phân giải thành tên thư mục, vì vậy chúng ta cần %f
lấy tên tệp. Trong khi xem các tập tin, %f
sẽ giải quyết chuỗi rỗng.
Lưu ý rằng, bạn cũng có thể chạy inotifywait
trong -d
chế độ daemon ( ), bạn cũng có thể tạo kịch bản cho toàn bộ nội dung và / hoặc chạy ở chế độ nền và / hoặc chơi với nó nhiều tùy chọn khác.
Ngoài ra, bạn có thể thay thế asciidoctor
bằng bất kỳ lệnh nào khác mà bạn chọn, nếu bạn muốn.
Kiểm tra man inotifywait
để có thêm ý tưởng.