পরিবর্তনগুলির জন্য একটি ফোল্ডার নিরীক্ষণ করুন, এবং কোনও পরিবর্তন সনাক্ত হলে একটি কমান্ড চালান


10

প্রতিবার একটি নির্দিষ্ট ফোল্ডারে কোনও ফাইল পরিবর্তিত হওয়ার সাথে সাথে (টার্মিনাল) কমান্ডটি স্বয়ংক্রিয়ভাবে চালানোর কোনও সহজ উপায় আছে?

কমান্ড লাইন, বা সিস্টেম অন্তর্নির্মিত অ্যাপ্লিকেশন, কোনও তৃতীয় পক্ষের অ্যাপ্লিকেশনগুলির মাধ্যমে এটি সম্ভব হওয়া উচিত।

কোন ধারনা?



উত্তর:


6

এই হিসাবে একটি সম্পত্তি তালিকা সংরক্ষণ করুন ~/Library/LaunchAgents/test.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>test</string>
    <key>ProgramArguments</key>
    <array>
        <string>say</string>
        <string>yy</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>~/Desktop/</string>
    </array>
</dict>
</plist>

এজেন্টটি launchctl load ~/Library/LaunchAgents/test.plistলগ আউট এবং পিছনে প্রবেশের মাধ্যমে লোড করা যায় changes পরিবর্তনগুলি প্রয়োগ করার জন্য প্লিস্টটি আনলোড এবং লোড করা প্রয়োজন।

টিলডে সম্প্রসারণ ( ~/) ডিফল্টরূপে ওয়াচপথগুলিতে কাজ করে। সক্ষমগ্লোবিং প্রোগ্রামআরগমেন্টসটির জন্য ওয়াইল্ডকার্ড এবং টিল্ড সম্প্রসারণ যুক্ত করে, তবে এটি প্রোগ্রাম বা ওয়াচপ্যাথগুলিকে প্রভাবিত করে না।

শেষ দেখার অনুরোধ থেকে দশ সেকেন্ডের মধ্যে যদি কোনও দেখা ফাইলটি সংশোধন করা হয় তবে সিস্টেমের.লগে এই জাতীয় বার্তা যুক্ত করা হবে:

com.apple.launchd.peruser.501[146]: (test) Throttling respawn: Will start in 7 seconds

বার্তাগুলি থেকে মুক্তি পাওয়ার এক উপায় হ'ল sleep 10স্ক্রিপ্টগুলির শেষের মতো কিছু যুক্ত করা । থ্রটলআইন্টারওয়াল 10 এ সেট করা কোনও কাজে দেয় না।

দেখা ফোল্ডারগুলির সাবফোল্ডারগুলির পরিবর্তনগুলি সনাক্ত করা যায়নি।

আরও তথ্যের জন্য দেখুন man launchdএবং man launchd.plist


6

ফাইল পরিবর্তিত হলে কমান্ড চালানোর জন্য এনট্রি (1) একটি ইউটিলিটি। এটি STDIN- এ ফাইলের একটি তালিকা পড়ে এবং পোলিং এড়ানোর জন্য কেকিউ (2) ব্যবহার করে ।

উদাহরণ:

ls my_project/*.html | entr echo "file changed"

3

আপনি ফোল্ডার ক্রিয়াগুলি ব্যবহার করতে পারেন, যা যখনই কোনও ফোল্ডার পরিবর্তিত হয় তখন আপনাকে (অটোমেটর) স্ক্রিপ্টগুলি কার্যকর করতে দেয়। যতদূর আমি জানি, অটোমেটরের একটি টেম্পলেট রয়েছে যা আপনাকে সহজেই একটি নতুন ফোল্ডার ক্রিয়া তৈরি করতে এবং এটিকে পছন্দসই ফোল্ডারে সংযুক্ত করতে দেয়। এবং "রান শেল স্ক্রিপ্ট" ক্রিয়া যুক্ত করে, আপনার কেবল পছন্দসই প্রভাব পাওয়া উচিত।


5
ধন্যবাদ, তবে এটি প্রদর্শিত হয় যে "ফোল্ডার অ্যাকশনগুলি" কেবল তখনই ট্রিগার করা হয় যখন কোনও ফাইল ফোল্ডারে যুক্ত করা হয়, যখন কোনও বিদ্যমান ফাইল চেক করা হয় না।
লুই বি।

3

কোনও ফাইল যুক্ত বা সংশোধিত হলে ফোল্ডার ক্রিয়াগুলি ট্রিগার করার জন্য সূক্ষ্ম।

তবে, যদি আপনার পরিবর্তিত সংজ্ঞায় কোনও ফাইল মোছা অন্তর্ভুক্ত থাকে তবে ওএসএক্স ফোল্ডার ক্রিয়াগুলি কোনও ফাইল সরানো হয়েছে কিনা তা সনাক্ত করে না।

প্রশ্নের উত্তর দিতে:

  1. এখান থেকে ফাইলওয়াচার নির্ভরতা ডাউনলোড করুন: https://github.com/eonist/swift-utils

  2. কোম্যান্ডলাইনে চলমান সুইফ্টের সাথে আপনার নিজেকে পরিচিত করুন: http://krakendev.io/blog/scriptting-in-swift

  3. একটি ফোল্ডার দেখতে এই কোডটি ব্যবহার করুন।

কোড:

var fileWatcher = FileWatcher(["~/Desktop/test/".tildePath])/*<---the fileWatcher instance must be scoped to your class*/

fileWatcher!.event = { event in
    Swift.print(self?.someVariable)//Outputs: a variable in your current class
    Swift.print(event.description)//Outputs: a description of the file change
}

1

অটোমেটরের একটি ধরণের ওয়ার্কফ্লো থাকে যা "ফোল্ডার অ্যাকশন" নামে পরিচিত যা কোনও ফোল্ডারে কিছু যুক্ত হওয়ার পরে স্বয়ংক্রিয়ভাবে চলে। একটি তৈরি করুন, তারপরে "শেল স্ক্রিপ্ট চালান" অ্যাকশনটি ব্যবহার করুন।


4
ধন্যবাদ, তবে এটি প্রদর্শিত হয় যে "ফোল্ডার অ্যাকশনগুলি" কেবল তখনই ট্রিগার করা হয় যখন কোনও ফাইল ফোল্ডারে যুক্ত করা হয়, যখন কোনও বিদ্যমান ফাইল চেক করা হয় না।
লুই বি।

ওহ ঠিক আছে. দুঃখিত।
টিমোথি মুয়েলার-হার্ডার

0

আপনি এই জাতীয় কিছু চেষ্টা করতে পারেন:

touch /tmp/dirb.tmp
while true do 
  ls /thedirtocheck > /tmp/dira.tmp 
  diff /tmp/dira.tmp /tmp/dirb.tmp || echo "something changed" 
  cp /tmp/dira.tmp /tmp/dirb.tmp 
  sleep 100 
done

আপনার ls -lপাশাপাশি ফাইলের পরিবর্তনগুলি ধরতে হবে।
nohillside

ডান .... এটি মিস করেছেন
হোলার ফন আমলেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.