Saya memiliki folder dengan banyak subfolder, folder ini telah asciidoctor
diformat dengan .adoc
ekstensi.
Setiap kali saya membuat perubahan pada file (yang sering) saya harus menjalankan
asciidoctor -q filename.adoc
untuk mengkompilasinya ke dalam format HTML.
Saya mencoba mengotomatiskan prosesnya. sejauh ini saya telah datang dengan menggunakan entr ini :
ls *.adoc | entr asciidoctor -q *.adoc
tetapi hanya berfungsi dengan folder yang ada bukan untuk subfolder. Saya sudah mencoba variasi ini, tetapi tidak berhasil:
find . -name '*.adoc' | entr asciidoctor -q *.adoc
Adakah ide bagaimana saya bisa menerapkan proses otomatis ini untuk semua subfolder?
command-line
bash
filesystem
dedak
sumber
sumber
Jawaban:
Linux menyediakan antarmuka yang bagus untuk memantau semua peristiwa sistem file seperti membuat, memodifikasi, menghapus file. Antarmuka adalah
inotify
kumpulan dari panggilan sistem, utilitas userspace yang memanfaatkan panggilan ini disediakan olehinotify-tools
paket di Ubuntu (tersedia di repositori semesta). Jika Anda belum memilikinya, instal dengan:inotify-tools
menyediakaninotifywait
daninotifywatch
binari, kita perlu yang pertama.Jadi Anda ingin menjalankan perintah
asciidoctor -q some_file
ketika.adoc
file apa pun dimodifikasi (some_file
akan diganti dengan itu), jika demikian dengan asumsi.adoc
file Anda ada di direktori/foo/bar
, Anda dapat mengatur arloji:-q
mengaktifkan mode senyap, tidak ada info dariinotifywait
dirinya sendiri-m
mengaktifkan mode monitor, jika tidak maka akan keluar setelah acara pertama--event modify
, Kami hanya tertarik padamodify
acara yaitu ketika file diubah Nilai-nilai lain yang mungkin termasukopen
,close
dll.--format %w
, kami hanya ingin nama file yang diubah daripada banyak info lain karena kami akan menggunakan nama file sebagai input ke perintah lain/foo/bar/*.adoc
akan diperluas ke semua.adoc
file di bawah/foo/bar
direktoriSekarang yang di atas akan menunjukkan kepada Anda nama file setiap kali ada modifikasi, sekarang untuk menjalankan perintah pada nama file (dengan asumsi perintah mengambil argumen melalui STDIN):
Anda juga dapat mengatur arloji rekursif pada direktori, yang kemudian perlu Anda gunakan
grep
untuk memfilter file yang diinginkan saja. Di sini, setel arloji secara rekursif (-r
) pada direktori/foo/bar
dan gunakangrep
untuk memfilter hanya.adoc
file:Saat menonton direktori, specifier format output
%w
menyelesaikan ke nama direktori, jadi kita perlu%f
mendapatkan nama file. Saat menonton file,%f
akan menyelesaikan string kosong.Perhatikan bahwa, Anda juga dapat menjalankan
inotifywait
dalam-d
mode daemon ( ), Anda juga dapat skrip semuanya, dan / atau berjalan di latar belakang, dan / atau bermain dengannya lebih banyak pilihan lain.Juga, Anda dapat mengganti
asciidoctor
dengan perintah lain pilihan Anda, jika Anda mau.Periksa
man inotifywait
untuk mendapatkan lebih banyak ide.sumber
Menggunakan
inotifywait
adalah pendekatan khas, tetapi ada juga utilitas terpisah yang disebutinotify-hookable
yang hanya memungkinkan Anda menjalankan perintah ketika file (atau direktori) berubah:Tampaknya keluar setelah memicu perintah sekali; Saya tidak melihat opsi untuk menonton terus-menerus, sehingga Anda dapat melakukan sesuatu seperti:
Perhatikan ada opsi untuk memantau beberapa file atau direktori, secara rekursif, dan opsi untuk mengabaikan file / jalur.
sumber
sudo apt-get install inotify-hookable
Ada banyak alat di luar sana, khususnya jika Anda mencari melalui repositori Anda
yang memberi kita banyak alat. Tetapi Anda tidak perlu menguji mereka karena saya melakukan itu.
Saya telah menguji alat ini dan banyak lainnya:
Di antara alat-alat ini saya menemukan tiga di antaranya berguna dan dapat diandalkan:
Dan di antara ketiganya, yang mengerikan adalah yang terbaik tanpa keraguan.
Sangat berguna dan dapat diandalkan untuk digunakan sehingga saya telah menggunakannya untuk pipa sederhana dengan layanan microser yang saya miliki.
direvent.conf
file untuk menontonIni hanya salah satu file konfigurasi yang saya miliki di mana setiap kali ada perubahan untuk menulis maka perintah ini dijalankan - yang bisa menjadi bash skrip juga.
Tidak perlu menggunakan
while
lingkaran atau hal lain.fitur
Dikembangkan oleh Sergey Poznyakoff .
Menginstal
Tetapi menginstalnya menggunakan kode sumbernya cukup mudah dan langsung yang memberi Anda versi terakhir (sekarang adalah: 5.1).
sumber
Yah saya sarankan yang berikut ini.
sumber