Monitor Folder OSX untuk perubahan file kemudian jalankan skrip bash [duplikat]

10

Kemungkinan Duplikat:
Tonton Sistem File secara Real Time di OS X dan Ubuntu

Saya mencari metode yang efisien untuk memantau direktori lokal di OSX dan jika ada file yang telah diubah di direktori tersebut jalankan skrip bash untuk mengkomit file ke github.

Adakah alat rekomendasi untuk memantau direktori untuk perubahan file, kemudian memicu tindakan, yaitu skrip bash?

Tegan Snyder
sumber
1
Pertanyaan apa adanya adalah batas rekomendasi perangkat lunak, yang umumnya tidak diizinkan pada Super User . Coba ulangi untuk menanyakan pertanyaan root Anda, "Bagaimana saya bisa secara otomatis melakukan perubahan dan mendorong dari repo git setiap kali file ditambahkan / dihapus / diubah?"
Darth Android
@DarthAndroid, accd ke FAQ, pertanyaan ini baik-baik saja. OP tidak meminta saran untuk berbelanja atau membeli.
ephsmith
1
@eph OP meminta rekomendasi untuk sesuatu, yang bukan topik. Masalah utama adalah bahwa mereka tidak menjelaskan masalah mereka dan hanya meminta solusi yang mereka coba.
slhck
Masalahnya sederhana. Pantau direktori untuk perubahan dan komit perubahan itu ke repositori. Itu semua dalam pertanyaan OP. Tautan yang Anda berikan memiliki jawabannya. Panggilan yang bagus.
ephsmith

Jawaban:

19

Menggunakan fswatch dari repositori Anda:

fswatch . 'git commit -avm "snapshot at ${date}"'

Contoh sederhana ini hanya akan menangkap perubahan pada file yang sudah ada di repositori.

Pierre Carrier
sumber
Ini dapat dilakukan dengan tindakan folder yang ada di dalam OS X. Lihat jawabannya melalui tautan yang disediakan oleh slhk di atas.
ephsmith
1
Anda dapat memperluas jawaban dengan menambahkan contoh yang menjelaskan apa yang ingin dicapai OP. Memposting tautan saja tidak dianjurkan.
slhck
Ini terlihat menggembirakan. Saya pikir saya bisa menjalankan ./fswatch / some / dir ./some/dir/bash_script.sh
Tegan Snyder
+1 - Saya mencoba fswatchsetelah membaca jawaban Anda. Utilitas yang sangat baik - sangat mirip dengan inotifyuntuk linux dan memanfaatkan asli OS Xfsevent
cwd
2

Salah satu opsi adalah menggunakan launchd saja. Simpan daftar properti seperti ini sebagai ~/Library/LaunchAgents/com.superuser.445907.plist, dan muat dengan launchctl load ~/Library/LaunchAgents/com.superuser.445907.plistatau dengan logout dan kembali.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.superuser.445907</string>
    <key>Program</key>
    <string>/Users/username/script</string> <!-- ~/ doesn't work -->
    <key>WatchPaths</key>
    <array>
        <string>/Users/username/Folder/</string>
    </array>
    <key>ThrotteInterval</key>
    <integer>0</integer> <!-- run at most every 0 seconds, by default 10 -->
</dict>
</plist>

Launchd hanya mendaftarkan perubahan pada file ketika mereka disimpan secara atom, atau dihapus dan diciptakan kembali setiap kali mereka disimpan. Sebagian besar aplikasi OS X melakukan penyimpanan atom secara default, tetapi misalnya TextMate dan vim tidak. Perubahan dalam subfolder dari folder yang ditonton tidak terdeteksi.

launchctl unload $path && launchctl load $path menerapkan perubahan pada daftar.

Lihat man launchddan man launchd.plistuntuk informasi lebih lanjut.

Lri
sumber
Pendekatan yang menarik. Saya akan melihatnya dan kembali kepada Anda. Terima kasih untuk umpan baliknya.
Tegan Snyder
Metode ini pasti memiliki keterbatasan. Anda tidak dapat mendeteksi perubahan dalam subfolder dari folder yang ditonton. Teknik ini juga tidak memberi tahu Anda file mana yang memiliki suatu peristiwa (file baru, modifikasi, penghapusan, dll.) - Hanya saja path memiliki suatu peristiwa.
Volomike