Linux zapewnia ładny interfejs do monitorowania wszystkich zdarzeń w systemie plików, takich jak tworzenie, modyfikowanie, usuwanie plików. Interfejs to inotifyrodzina wywołań systemowych, narzędzia przestrzeni użytkownika wykorzystujące te wywołania są dostarczane przez inotify-toolspakiet w Ubuntu (dostępny w repozytorium wszechświata). Jeśli jeszcze go nie masz, zainstaluj:
sudo apt-get install inotify-tools
inotify-toolszapewnia inotifywaiti inotifywatchpliki binarne, potrzebujemy pierwszego.
Więc chcesz uruchomić polecenie, asciidoctor -q some_filegdy dowolny .adocplik zostanie zmodyfikowany ( some_filezostanie zastąpiony tym), jeśli tak, zakładając, że twoje .adocpliki znajdują się w katalogu /foo/bar, możesz ustawić zegarek:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-qwłącza tryb cichy, brak informacji od inotifywaitsiebie
-m włącza tryb monitorowania, w przeciwnym razie wyjdzie po pierwszym zdarzeniu
--event modify, interesuje nas tylko modifyzdarzenie, tj. modyfikacja pliku. Inne możliwe wartości to open, closeetc.
--format %w, chcemy tylko zmodyfikowanej nazwy pliku, a nie innych informacji, ponieważ będziemy używać nazwy pliku jako danych wejściowych do innego polecenia
/foo/bar/*.adoczostanie rozwinięty do wszystkich .adocplików w /foo/barkatalogu
Teraz powyższe pokaże nazwę pliku przy każdej modyfikacji, teraz, aby uruchomić polecenie na nazwie pliku (zakładając, że polecenie przyjmuje argumenty przez STDIN):
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
Możesz także ustawić zegarek rekursywny w katalogu, a następnie będziesz musiał użyć grepdo filtrowania tylko wybranych plików. Tutaj ustawiam rekursywnie ( -r) na katalog /foo/bari używamy grepdo filtrowania tylko .adocplików:
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
Podczas oglądania katalogów specyfikator formatu wyjściowego %wrozpoznaje nazwę katalogu, więc musimy %fuzyskać nazwę pliku. Podczas oglądania plików, %fpostanawia opróżnić ciąg.
Zauważ, że możesz także uruchomić inotifywaitw -dtrybie daemon ( ), możesz także napisać skrypt i / lub uruchomić w tle i / lub grać z innymi opcjami.
Możesz także zastąpić asciidoctordowolne inne polecenie, jeśli chcesz.
Sprawdź, man inotifywaitaby uzyskać więcej pomysłów.