फ़ाइल परिवर्तनों के लिए एक फ़ोल्डर OSX की निगरानी करें और फिर एक bash स्क्रिप्ट चलाएं [डुप्लिकेट]


10

संभावित डुप्लिकेट:
OS X और Ubuntu पर रियल टाइम में फाइलसिस्टम देखें

मैं OSX में एक स्थानीय निर्देशिका की निगरानी करने के लिए एक कुशल विधि की तलाश कर रहा हूं और अगर उस निर्देशिका में किसी भी फाइल को बदल दिया गया है तो फ़ाइलों को github करने के लिए एक bash स्क्रिप्ट चलाएं।

फ़ाइल परिवर्तन के लिए निर्देशिका की निगरानी के लिए कोई भी उपकरण सुझाता है, फिर एक कार्रवाई को ट्रिगर करता है, यानी बैश स्क्रिप्ट?


1
जैसा कि यह सवाल एक सॉफ्टवेयर सिफारिश की सीमा रेखा है, जिसे आम तौर पर सुपर उपयोगकर्ता की अनुमति नहीं है । अपने मूल प्रश्न को पूछने के लिए इसे रीफ़्रैश करने का प्रयास करें, "जब भी फाइलें जोड़ी / हटाई / बदली जाती हैं, तो मैं स्वतः परिवर्तन कैसे कर सकता हूं और गिट रेपो से कैसे धक्का दे सकता है?"
डार्थ Android

@DarthAndroid, अकसर किये गए सवाल, यह सवाल ठीक है क्योंकि यह खड़ा है। ओपी खरीदारी या सलाह लेने के लिए नहीं कह रहा है।
इफिसिथ

1
@ ओफ़ ओपी किसी चीज़ के लिए सिफारिशें मांग रहा है, जो विषय से हटकर है। हालांकि मुख्य समस्या यह है कि वे अपनी समस्या नहीं समझा रहे हैं और केवल अपने हल के लिए पूछ रहे हैं।
23

समस्या सरल है। परिवर्तनों के लिए एक निर्देशिका की निगरानी करें और उन परिवर्तनों को एक भंडार में रखें। यह सब ओपी के सवाल में है। आपके द्वारा प्रदत्त लिंक का उत्तर है। अच्छा निर्णय।
इफिसिथ

जवाबों:


19

अपने रिपॉजिटरी से फ़ॉस्वाच का उपयोग करना :

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

यह सरल उदाहरण केवल रिपॉजिटरी में पहले से ही फाइल में बदलाव को पकड़ लेगा।


यह उन फ़ोल्डर क्रियाओं के साथ किया जा सकता है जो OS X में निर्मित हैं। ऊपर दिए गए लिंक के माध्यम से उत्तर देखें।
इफिसिथ

1
आप एक उदाहरण जोड़कर अपने जवाब का विस्तार कर सकते हैं कि ओपी क्या हासिल करना चाहता है। बस एक लिंक पोस्ट करने को प्रोत्साहित नहीं किया जाता है।

यह उत्साहजनक लग रहा है। मैं सोच रहा / कुछ / dir ./some/dir/bash_script.sh ./fswatch चला सकते हैं
टेगन स्नाइडर

+1 - मैंने fswatchआपके उत्तर को पढ़ने के बाद कोशिश की । उत्कृष्ट उपयोगिता - inotifyलिनक्स के लिए बहुत समान है और यह OS X के मूलfsevent
cwd

2

एक विकल्प सिर्फ लॉन्च लॉन्च का उपयोग करना होगा। इस तरह से एक संपत्ति सूची को सहेजें ~/Library/LaunchAgents/com.superuser.445907.plist, और इसे launchctl load ~/Library/LaunchAgents/com.superuser.445907.plistलॉग आउट करके या पीछे से लोड करें ।

<?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>

लॉन्चड केवल उन फ़ाइलों में बदलावों को पंजीकृत करता है जब उन्हें परमाणु रूप से सहेजा जाता है, या हर बार सहेजने के बाद हटा दिया जाता है और पुनः बनाया जाता है। अधिकांश OS X अनुप्रयोग डिफ़ॉल्ट रूप से परमाणु बचत करते हैं, लेकिन उदाहरण के लिए TextMate और vim नहीं। देखे गए फ़ोल्डर के सबफ़ोल्डर में परिवर्तन का पता नहीं लगाया गया है।

launchctl unload $path && launchctl load $path प्लिस्ट में परिवर्तन लागू करता है।

देखें man launchdऔर man launchd.plistअधिक जानकारी के लिए।


दिलचस्प दृष्टिकोण। मैं इस पर एक नज़र डालूंगा और आपके पास वापस आऊंगा। प्रतिक्रिया के लिए धन्यवाद।
तेगन स्नाइडर

इस पद्धति की निश्चित रूप से अपनी सीमाएँ हैं। आप देखे गए फ़ोल्डर्स के सबफ़ोल्डर में परिवर्तन का पता नहीं लगा सकते हैं। यह तकनीक आपको यह भी नहीं बताती है कि किस फ़ाइल में कोई ईवेंट था (नई फ़ाइल, संशोधन, विलोपन, आदि) - बस उस पथ पर एक ईवेंट था।
Volomike
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.