ফাইল পরিবর্তন নিরীক্ষণ এবং কমান্ড কার্যকর করার জন্য স্ক্রিপ্ট বাশ করুন


12

আমার কাছে একগুচ্ছ সাবফোল্ডার সহ একটি ফোল্ডার রয়েছে, এই ফোল্ডারগুলি এক্সটেনশনের asciidoctorসাথে ফর্ম্যাট করে .adoc

প্রতিবার আমি ফাইলগুলিতে পরিবর্তন করেছি (যা প্রায়শই হয়) আমাকে চালানো দরকার

asciidoctor -q filename.adoc

এটি HTML ফর্ম্যাটে সংকলন করতে ile

আমি প্রক্রিয়াটি স্বয়ংক্রিয় করার চেষ্টা করছি। এখন পর্যন্ত আমি এন্টার ব্যবহার করে এটি নিয়ে এসেছি :

ls *.adoc | entr asciidoctor -q *.adoc

তবে কেবল বিদ্যমান ফোল্ডারটিতে কাজ করে সাবফোল্ডারগুলির জন্য নয়। আমি এই প্রকরণটি চেষ্টা করেছি, তবে এটি কার্যকর হয় না:

find . -name '*.adoc' | entr asciidoctor -q *.adoc

আমি কীভাবে সমস্ত সাবফোল্ডারগুলির জন্য এই স্বয়ংক্রিয় প্রক্রিয়াটি প্রয়োগ করতে পারি কোনও ধারণা?


উত্তর:


17

লিনাক্স সমস্ত ফাইল সিস্টেমের ইভেন্টগুলি ফাইল তৈরি করা, সংশোধন করা, অপসারণের জন্য একটি দুর্দান্ত ইন্টারফেস সরবরাহ করে। ইন্টারফেসটি inotifyসিস্টেম কলগুলির পরিবার, এই কলগুলির উপকারের জন্য ব্যবহারকারী স্পেস ইউটিলিটিগুলি inotify-toolsউবুন্টুতে প্যাকেজ দ্বারা সরবরাহ করা হয় (মহাবিশ্বের সংগ্রহস্থলটিতে উপলব্ধ)। আপনার যদি এটি ইতিমধ্যে না থাকে তবে এর মাধ্যমে ইনস্টল করুন:

sudo apt-get install inotify-tools

inotify-toolsসরবরাহ inotifywaitএবং inotifywatchবাইনারি, আমাদের প্রথমটি দরকার।


সুতরাং আপনি যে asciidoctor -q some_fileকোনও .adocফাইল সংশোধন করার সময় কমান্ডটি চালাতে চান ( some_fileতার দ্বারা প্রতিস্থাপন করা হবে), যদি তাই ধরে নেওয়া হয় যে আপনার .adocফাইল ডিরেক্টরিতে রয়েছে /foo/bar, আপনি ঘড়িটি সেট করতে পারেন:

inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
  • -qনিঃশব্দ মোড সক্ষম করে, inotifywaitনিজের থেকে কোনও তথ্য দেয় না

  • -m মনিটর মোড সক্ষম করে, অন্যথায় এটি প্রথম ইভেন্টের পরে প্রস্থান করবে

  • --event modify, আমরা কেবল modifyইভেন্টে আগ্রহী অর্থাৎ যখন কোনও ফাইল সংশোধিত হয়। অন্যান্য সম্ভাব্য মান অন্তর্ভুক্ত open, closeইত্যাদি

  • --format %w, আমরা কেবল ফাইলের নামটিই চাই যা অন্য তথ্যের গুচ্ছের চেয়ে পরিবর্তিত হয় কারণ আমরা ফাইলের নামটি অন্য কমান্ডের ইনপুট হিসাবে ব্যবহার করব

  • /foo/bar/*.adocডিরেক্টরি .adocঅধীন সমস্ত ফাইল প্রসারিত করা হবে/foo/bar


এখন উপরেরটি আপনাকে ফাইলের নামটি দেখাবে যখনই যেকোন সংশোধন করা হয়েছে, এখন ফাইল নেমে কমান্ড চালাতে (কমান্ডটি STDIN এর মাধ্যমে আর্গুমেন্ট গ্রহণ করে ধরে নিবে):

inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q

আপনি ডিরেক্টরিতে একটি পুনরাবৃত্ত ঘড়ি সেটআপ করতে পারেন, তারপরে আপনাকে grepকেবলমাত্র পছন্দসই ফাইলগুলি ফিল্টার করার জন্য ব্যবহার করতে হবে । এখানে -rডিরেক্টরিতে পুনরাবৃত্তভাবে ( ) ঘড়ির সেট করে /foo/barএবং grepকেবলমাত্র .adocফাইলগুলি ফিল্টার করতে ব্যবহার করে:

inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q

ডিরেক্টরিগুলি দেখার সময় আউটপুট ফর্ম্যাট স্পেসিফায়ার %wডিরেক্টরি নামের সাথে সংশোধন করে, সুতরাং আমাদের %fফাইলের নামটি নেওয়া দরকার। ফাইলগুলি দেখার সময়, %fখালি স্ট্রিংয়ের সমাধান হবে।

মনে রাখবেন, আপনি inotifywaitডিমন ( -d) মোডেও চালাতে পারেন , আপনি পুরো জিনিসটি স্ক্রিপ্টও করতে পারেন, এবং / অথবা ব্যাকগ্রাউন্ডে চালাতে পারেন, এবং / অথবা এটির সাথে আরও অন্যান্য বিকল্প খেলতে পারেন।

এছাড়াও, আপনি চাইলে asciidoctorআপনার পছন্দের অন্য কোনও কমান্ডের সাথে প্রতিস্থাপন করতে পারেন।

man inotifywaitআরও ধারণা পেতে চেক করুন ।


ধন্যবাদ এটি কাজ করেছে। আমি ওএসএক্সের জন্যও অনুরূপ কিছু। তবে আমি অনুমান করি এটি জিজ্ঞাসা করার জন্য সঠিক জায়গা নয়।
ব্রান

@bran হ্যাঁ, এই প্রোগ্রামটিতে যেতে উল , আপনি একটি রেফারেন্স হিসাবে এই ব্যবহার করতে পারেন।
হিমাইল 21

দুর্দান্ত উত্তর, কেবল একটি ছোটখাটো সংশোধন। -Q প্রোগ্রামটিকে "কম ভার্বোজ" করে তোলে, -কিউ (ডাবল কিউ) মারাত্মক ত্রুটি বাদে একেবারে নিঃশব্দ করে তোলে।
জোতাডেপিকাস

4

ব্যবহার inotifywaitটিপিক্যাল পন্থা, কিন্তু আরো একটি পৃথক ইউটিলিটি নামক inotify-hookableশুধু আপনার একটি কমান্ড চালাতে হলে ফাইল (অথবা ডাইরেক্টরি) পরিবর্তন করতে দেয়:

inotify-hookable -f filename.adoc -c 'asciidoctor -q filename.adoc'

কমান্ডটি একবার ট্রিগার করার পরে এটি প্রস্থান করা হবে বলে মনে হচ্ছে; অবিচ্ছিন্নভাবে দেখার জন্য আমি কোনও বিকল্প দেখতে পাচ্ছি না, তাই আপনি এমন কিছু করতে পারেন:

while true; do
    inotify-hookable -f filename.adoc -c 'asciidoctor -q filename.adoc'
    echo "== $(date) : executed, continuing to monitor..."
done

নোট করুন কয়েকটি ফাইল বা ডিরেক্টরি নিরীক্ষণের বিকল্প রয়েছে, পুনরাবৃত্তভাবে এবং ফাইল / পাথ উপেক্ষা করার বিকল্প রয়েছে।


inotify-hookable আমার জন্য কমান্ড চালানোর পরে প্রস্থান করে না। হুম
সর্বাধিক

ইনোটিফাই-হুকিয়েবল একটি পৃথক প্যাকেজ থেকে ইনস্টল করা হয়েছে:sudo apt-get install inotify-hookable
ব্রুনো সিলভানো

3

সেখানে প্রচুর সরঞ্জাম রয়েছে, বিশেষত যদি আপনি আপনার সংগ্রহস্থলটি অনুসন্ধান করেন

apt-cache search monitor | grep file

যা আমাদের অনেক সরঞ্জাম দেয়। তবে আপনাকে সেগুলি পরীক্ষা করার দরকার নেই কারণ আমি এটি করেছি।

আমি এই সরঞ্জামগুলি এবং আরও অনেককে পরীক্ষা করে দেখেছি:

  • inotify
  • fswatch
  • filewatch
  • নমুনা
  • fileschanged
  • entr

এই সরঞ্জামগুলির মধ্যে আমি তাদের মধ্যে তিনটি দরকারী এবং নির্ভরযোগ্য পেয়েছি:

  • ডিরেক্টরি | সিএন-তে লেখা জিএনইউ
  • iwatch | পার্ল মধ্যে
  • fsniper

এবং এই তিনটির মধ্যেই কোনও সন্দেহ ছাড়াই ডাইরেক্ট সেরা।

এটি ব্যবহারে এটি এতটাই দরকারী এবং নির্ভরযোগ্য যে আমি আমার মাইক্রোসার্ভিসিস সহ এটি একটি সাধারণ পাইপলাইনের জন্য ব্যবহার করেছি।

direvent.conf দেখার জন্য ফাইল

syslog {
    facility local0;
    tag "direvent";
    print-priority yes;
}

watcher {
    path /var/www/html/ir/jsfun/build/react recursive;
    file "*.js";
    event write;
    command "/usr/bin/xdotool search --onlyvisible  --class firefox key F5";
    option (stdout, stderr, wait);
}

এটি আমার কাছে থাকা কনফিগার ফাইলগুলির মধ্যে একটি মাত্র যেখানে যখনই লেখার জন্য পরিবর্তন হয় তখন এই কমান্ডটি কার্যকর করা হয় - যা স্ক্রিপ্টও হতে পারে ।

whileলুপ বা অন্যান্য জিনিস ব্যবহার করার দরকার নেই ।


বৈশিষ্ট্য

  • পুনরাবৃত্তভাবে একটি ডিরেক্টরি দেখছেন
  • ডেমন হিসাবে অগ্রভাগ বা ব্যাকগ্রাউন্ডে চালানো যেতে পারে
  • সুবহ. আমার এটি উবুন্টুতে পাশাপাশি CentOS7 সার্ভারে রয়েছে
  • ফাইল নাম রিপোর্ট
  • ফাইল ম্যাচ সমর্থন করার জন্য regex
  • মালিট-ফাইল দেখা (কেবলমাত্র এক ধরণের ফাইলের আরও দেখুন)
  • কমান্ড এক্সিকিউশন সিঙ্ক্রোনাইজ করুন (যদি আমাদের বহু-প্রহরী থাকে)
  • সিসলগ হ্যান্ডলিং (আমরা চাইলে সিসলগে লগ করুন)
  • কাজ করার জন্য সহজ এবং ভাল সি এল আই এবং কনফিগার ফাইল ডিজাইন

দ্বারা উন্নত সার্জি Poznyakoff


ইনস্টল করার প্রক্রিয়া

sudo apt install direvent

তবে এর উত্স কোডটি ব্যবহার করে এটি ইনস্টল করা বেশ সহজ এবং সোজা। যা আপনাকে শেষ সংস্করণ দেয় (এখনই: 5.1)।


-3

ভাল আমি নিম্নলিখিত সুপারিশ।

#!/bin/bash
#Script
for SRC in *.adoc; 
      do
      asciidoctor -q $SRC
  done

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