Mam folder z wieloma podfolderami, foldery te zostały asciidoctor
sformatowane z .adoc
rozszerzeniem.
Za każdym razem, gdy wprowadzam zmiany w plikach (co często bywa), muszę uruchomić
asciidoctor -q filename.adoc
aby skompilować go do formatu HTML.
Próbuję zautomatyzować ten proces. do tej pory korzystałem z tego za pomocą entr :
ls *.adoc | entr asciidoctor -q *.adoc
ale działa tylko z istniejącym folderem, a nie dla podfolderów. Wypróbowałem tę odmianę, ale nie działa:
find . -name '*.adoc' | entr asciidoctor -q *.adoc
Wszelkie pomysły, w jaki sposób mogę zaimplementować ten zautomatyzowany proces dla wszystkich podfolderów?
command-line
bash
filesystem
otręby
źródło
źródło
Odpowiedzi:
Linux zapewnia ładny interfejs do monitorowania wszystkich zdarzeń w systemie plików, takich jak tworzenie, modyfikowanie, usuwanie plików. Interfejs to
inotify
rodzina wywołań systemowych, narzędzia przestrzeni użytkownika wykorzystujące te wywołania są dostarczane przezinotify-tools
pakiet w Ubuntu (dostępny w repozytorium wszechświata). Jeśli jeszcze go nie masz, zainstaluj:inotify-tools
zapewniainotifywait
iinotifywatch
pliki binarne, potrzebujemy pierwszego.Więc chcesz uruchomić polecenie,
asciidoctor -q some_file
gdy dowolny.adoc
plik zostanie zmodyfikowany (some_file
zostanie zastąpiony tym), jeśli tak, zakładając, że twoje.adoc
pliki znajdują się w katalogu/foo/bar
, możesz ustawić zegarek:-q
włącza tryb cichy, brak informacji odinotifywait
siebie-m
włącza tryb monitorowania, w przeciwnym razie wyjdzie po pierwszym zdarzeniu--event modify
, interesuje nas tylkomodify
zdarzenie, tj. modyfikacja pliku. Inne możliwe wartości toopen
,close
etc.--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/*.adoc
zostanie rozwinięty do wszystkich.adoc
plików w/foo/bar
kataloguTeraz 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):
Możesz także ustawić zegarek rekursywny w katalogu, a następnie będziesz musiał użyć
grep
do filtrowania tylko wybranych plików. Tutaj ustawiam rekursywnie (-r
) na katalog/foo/bar
i używamygrep
do filtrowania tylko.adoc
plików:Podczas oglądania katalogów specyfikator formatu wyjściowego
%w
rozpoznaje nazwę katalogu, więc musimy%f
uzyskać nazwę pliku. Podczas oglądania plików,%f
postanawia opróżnić ciąg.Zauważ, że możesz także uruchomić
inotifywait
w-d
trybie daemon ( ), możesz także napisać skrypt i / lub uruchomić w tle i / lub grać z innymi opcjami.Możesz także zastąpić
asciidoctor
dowolne inne polecenie, jeśli chcesz.Sprawdź,
man inotifywait
aby uzyskać więcej pomysłów.źródło
Używanie
inotifywait
jest typowym podejściem, ale istnieje także osobne narzędzie,inotify-hookable
które pozwala na uruchomienie polecenia, gdy zmienia się plik (lub katalog):Wydaje się, że kończy działanie po jednokrotnym uruchomieniu polecenia; Nie widzę opcji ciągłego oglądania, więc możesz zrobić coś takiego:
Uwaga: istnieją opcje monitorowania kilku plików lub katalogu rekurencyjnie oraz opcje ignorowania plików / ścieżek.
źródło
sudo apt-get install inotify-hookable
Istnieje wiele narzędzi, szczególnie jeśli przeszukujesz swoje repozytorium
co daje nam wiele narzędzi. Ale nie musicie ich testować, ponieważ to zrobiłem.
Przetestowałem te narzędzia i wiele innych:
Wśród tych narzędzi znalazłem trzy z nich przydatne i niezawodne:
A między tymi trzech, direvent jest najlepszy bez wątpienia.
Jest tak użyteczny i niezawodny w użyciu, że użyłem go do prostego potoku z moimi mikrousługami, które mam.
direvent.conf
plik do oglądaniaJest to tylko jeden z plików konfiguracyjnych, w których mam, w których za każdym razem, gdy zachodzi zmiana zapisu, to polecenie jest wykonywane - co może być również skryptem bash .
Nie musisz używać
while
pętli ani innych rzeczy.funkcje
Opracowany przez Sergey Poznyakoff .
Instalowanie
Ale zainstalowanie go za pomocą kodu źródłowego jest dość łatwe i łatwe, co daje ostatnią wersję (obecnie jest to: 5.1).
źródło
Cóż, polecam następujące.
źródło