Linux, dosya oluşturma, değiştirme, kaldırma gibi tüm dosya sistemi olaylarını izlemek için hoş bir arayüz sağlar. Arayüz inotifysistem çağrıları ailesidir, bu çağrıları kullanan kullanıcı alanı yardımcı programları inotify-toolsUbuntu'daki paket tarafından sağlanır (evren deposunda bulunur). Zaten sahip değilseniz, aşağıdakileri yükleyin:
sudo apt-get install inotify-tools
inotify-toolssağlar inotifywaitve inotifywatchikililer, birincisine ihtiyacımız var.
Bu nedenle asciidoctor -q some_file, herhangi bir .adocdosya değiştirildiğinde ( some_filebununla değiştirilecektir) komutu çalıştırmak istiyorsunuz , eğer .adocdosyalarınız dizinde /foo/barvarsa, saati ayarlayabilirsiniz:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-qsessiz modu etkinleştirir, inotifywaitkendisinden bilgi yok
-m monitör modunu etkinleştirir, aksi takdirde ilk olaydan sonra çıkacaktır
--event modify, yalnızca modifyetkinlikle, yani bir dosya değiştirildiğinde. Diğer olası değerler open, closevb.
--format %w, dosya adını başka bir komuta girdi olarak kullanacağımızdan, yalnızca diğer bilgilerden ziyade değiştirilen dosya adının kullanılmasını istiyoruz
/foo/bar/*.adocdizin .adocaltındaki tüm dosyalara genişletilecek/foo/bar
Şimdi yukarıdakiler, herhangi bir değişiklik yapıldığında dosya adını gösterecektir, şimdi dosya adı üzerindeki komutu çalıştırmak için (komutun STDIN üzerinden argümanlar aldığını varsayarak):
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
Ayrıca dizinde özyinelemeli bir saat ayarlayabilirsiniz, daha sonra grepyalnızca istediğiniz dosyaları filtrelemek için kullanmanız gerekir . Burada saati -rdizinde yinelemeli olarak ( ) ayarlamak ve yalnızca dosyaları filtrelemek için /foo/barkullanmak :grep.adoc
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
Dizinleri izlerken çıktı biçimi belirleyicisi %w dizin adına çözümlenir, bu nedenle %fdosya adını almamız gerekir . Dosyaları izlerken %fboş dizeye gider.
Ayrıca, inotifywait , daemon ( -d) modunda , her şeyi kodlayabileceğinizi ve / veya arka planda çalıştırabileceğinizi ve / veya onunla daha fazla seçenek oynayabileceğinizi unutmayın.
Ayrıca, asciidoctor herhangi bir komutla .
man inotifywaitDaha fazla fikir edinmek için kontrol edin .