Belirli bir uygulamada "Kaydettiğimde" otomatik olarak bir kabuk komutunu, AppleScript veya launchd görevini nasıl uygulayabilirim?
İşletim Sistemi: Mavericks
Belirli bir uygulamada "Kaydettiğimde" otomatik olarak bir kabuk komutunu, AppleScript veya launchd görevini nasıl uygulayabilirim?
İşletim Sistemi: Mavericks
Yanıtlar:
Bu SO cevabı muhtemelen sorunuza cevap verir - Bash komut dosyası, klasör izleme, komutu çalıştır .
Bu komut dosyası 2 saniye boyunca uyuduğu ve MD5 karmaları bir dizindeki dosyalarda yeniden hesapladığı için cron çalıştırmaktan uzak değildir.
Gerçek bir olay odaklı çözüm istiyorsanız, FSEvent kullanarak fswatch veya başka bir uygulamayı / libu deneyebilirsiniz .
WatchPaths
Anahtarını arıyorsun launchd
. Şurada bir iş tanımı oluşturun ~/Library/LaunchAgents
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.convertToTxt</string>
<key>Program</key>
<string>/path/to/script</string>
<key>WatchPaths</key>
<array>
<string>/path/to/directory</string>
</array>
</dict>
</plist>
Zor kısım, hangi dosyanın değiştirildiğini bulmak . Betik, bir dosya bu dizinde her oluşturulduğunda veya değiştirildiğinde launchd
tetiklenir ancak eylemi tetikleyen dosyanın ipucunu sağlamaz. Dizin içeriğini oluşturma tarihine ( ls -t /path/to/directory | head -1
) göre sıralamak, durumunuzda hile yapmalıdır. Dönüştürülen dosyanızı başka bir dizine de yazdığınızdan emin olun. Aksi takdirde, dosya dönüştürme komut dosyasını tekrar tetikler.
launchd
size yardımcı olmayacak.