Klasör OSX'ini dosya değişiklikleri için izleyin ve ardından bir bash betiği çalıştırın [çoğalt]


10

Olası Çoğaltma:
Dosya Sistemini OS X ve Ubuntu'da Gerçek Zamanlı İzleyin

OSX yerel bir dizini izlemek için verimli bir yöntem arıyorum ve bu dizinde herhangi bir dosya değiştirilmişse github için dosyaları işlemek için bir bash komut dosyası çalıştırın.

Herhangi bir dosya değişiklikleri için bir dizini izlemek, daha sonra bir eylem, yani bir bash komut dosyası tetiklemek için herhangi bir tavsiye araçları?


1
Bu soru olduğu gibi, Süper Kullanıcıda genel olarak izin verilmeyen bir yazılım önerisi olan sınırdadır . Kök sorunuza "Dosyaları ne zaman eklenir / silinir / değiştirilirse değişiklikleri otomatik olarak nasıl yapabilirim ve bir git deposundan gönderebilirim?"
Darth Android

@DarthAndroid, SSS'ye göre, bu soru olduğu gibi iyi. OP alışveriş ya da tavsiye almak istemiyor.
ephsmith

1
@eph OP, konu dışı bir şey için öneriler istiyor. Ancak asıl sorun, problemlerini açıklamamaları ve sadece kendi çözüm girişimlerini istemeleri.
slhck

Sorun basit. Bir dizini değişiklikler için izleyin ve bu değişiklikleri bir depoya kaydedin. Her şey OP'nin sorusudur. Verdiğiniz bağlantının cevabı var. İyi karar.
ephsmith

Yanıtlar:


20

Deponuzdaki fswatch'ı kullanma :

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

Bu basit örnek yalnızca depodaki dosyalarda yapılan değişiklikleri yakalar.


Bu, OS X'te yerleşik olan klasör eylemleriyle yapılabilir. Yukarıdaki slhk bağlantısıyla cevaba bakın.
ephsmith

1
OP'nin neyi başarmak istediğini açıklayan bir örnek ekleyerek cevabınızı genişletebilirsiniz. Sadece link göndermek teşvik edilmez.
slhck

Bu cesaret verici görünüyor. Sanırım ./fswatch / some / dir ./some/dir/bash_script.sh
Tegan Snyder

+1 - fswatchCevabınızı okuduktan sonra denedim . Mükemmel yarar - inotifylinux için çok benzer ve OS X'in yerli kullanırfsevent
cwd

2

Bir seçenek sadece launchd kullanmak olacaktır. Bunun gibi bir özellik listesini kaydedin ~/Library/LaunchAgents/com.superuser.445907.plistve launchctl load ~/Library/LaunchAgents/com.superuser.445907.plistoturumu kapatıp tekrar oturum açarak yükleyin .

<?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, dosyaları yalnızca atomik olarak kaydedildiklerinde veya her kaydedildiklerinde silinip yeniden oluşturulduklarında kaydeder. Çoğu OS X uygulaması varsayılan olarak atomik kaydetme gerçekleştirir, ancak örneğin TextMate ve vim yapmaz. İzlenen klasörlerin alt klasörlerindeki değişiklikler algılanmaz.

launchctl unload $path && launchctl load $path değişiklikleri pliste uygular.

Daha fazla bilgi için man launchdve bölümüne bakın man launchd.plist.


İlginç bir yaklaşım. Bir göz atacağım ve size geri döneceğim. Geri dönüşünüz için teşekkür ederiz.
Tegan Snyder

Bu yöntemin kesinlikle sınırları vardır. İzlenen klasörlerin alt klasörlerindeki değişiklikleri tespit edemezsiniz. Bu teknik aynı zamanda hangi dosyanın bir etkinliğe (yeni dosya, değişiklik, silme vb.) Sahip olduğunu söylemez - sadece yolun bir etkinliği olduğunu.
Volomike
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.