অবিচ্ছিন্নভাবে একাধিক ডিরেক্টরিগুলির মধ্যে ইনোটাইফাই-সরঞ্জামগুলি সহ নতুন ফাইল (গুলি) সনাক্ত করুন


17

আমি সবেমাত্র ইনোটিফাই-সরঞ্জাম ইনস্টল করেছি। আমি একাধিক ডিরেক্টরিতে পুনরাবৃত্তভাবে বিজ্ঞপ্তি-সরঞ্জামগুলি সহ নতুন ফাইল (গুলি) সনাক্ত করতে এবং পোস্টফিক্স ব্যবহার করে একটি ইমেল প্রেরণ করতে চাই। আমি সম্ভবত পোস্টফিক্স অংশ ব্যবহার করে ইমেল প্রেরণটি পরিচালনা করতে পারি। আমি যখন নতুন ফাইল (গুলি) সনাক্ত করার চেষ্টা করছিলাম তখন এ সম্পর্কে সবচেয়ে ভাল উপায়টি বের করার চেষ্টা করছি। কারণ মাঝে মাঝে একাধিক ফাইল যুক্ত হয়।

উত্তর:


39

ইনোটিফাইয়েট ( ইনোটাইফাই-সরঞ্জামগুলির অংশ ) আপনার উদ্দেশ্যটি সম্পাদন করার জন্য সঠিক সরঞ্জাম, এটি একই সাথে বেশ কয়েকটি ফাইল তৈরি হচ্ছে তা বিবেচনা করে না, এটি তাদের সনাক্ত করবে।

এখানে একটি নমুনা স্ক্রিপ্ট:

#!/bin/sh
MONITORDIR="/path/to/the/dir/to/monitor/"
inotifywait -m -r -e create --format '%w%f' "${MONITORDIR}" | while read NEWFILE
do
        echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "yourmail@addresshere.tld"
done

inotifywait এই বিকল্পগুলি ব্যবহার করবে।

-মির অনির্দিষ্টকালের জন্য নিরীক্ষণ করার জন্য, আপনি যদি এই বিকল্পটি ব্যবহার না করেন, একবার এটি একটি নতুন ফাইল সনাক্ত করেছে তবে স্ক্রিপ্টটি শেষ হবে।

-r ফাইলগুলি পুনরাবৃত্তির সাথে নিরীক্ষণ করবে (যদি নতুন তৈরি ফাইলগুলি সনাক্ত করতে অনেক বেশি ডায়ার / ফাইল থাকে তবে)

-আমি তৈরির বিষয়টি নিরীক্ষণের জন্য ইভেন্টটি নির্দিষ্ট করার বিকল্প এবং আপনার ক্ষেত্রে এটি নতুন ফাইলগুলির যত্ন নেওয়ার জন্য তৈরি করা উচিত

--format '% w% f' ফাইলটি /complete/path/file.name বিন্যাসে মুদ্রণ করবে

"$ ON মনটর্ডার}" হ'ল পরিবর্তনশীল যা নিরীক্ষণের জন্য যে পথটি আমরা আগে সংজ্ঞায়িত করেছি containing

সুতরাং ঘটনা যে একটি নতুন ফাইল তৈরি করা হয়, inotifywait এটা নির্ণয় করতে পারবে এবং আউটপুট প্রিন্ট হবে (/complete/path/file.name) পাইপ থেকে এবং যখন হবে পরিবর্তনশীল NEWFILE যে আউটপুট নির্ধারণ

লুপটির অভ্যন্তরে আপনি নিজের ঠিকানাতে একটি মেইল ​​প্রেরণ করার একটি উপায় দেখতে পাবেন মেলএক্স ইউটিলিটি যা আপনার স্থানীয় এমটিএ (আপনার ক্ষেত্রে, পোস্টফিক্স) এর সাথে ভাল কাজ করবে।

আপনি যদি বেশ কয়েকটি ডিরেক্টরি নিরীক্ষণ করতে চান তবে ইনোটিফাইয়েট এটির অনুমতি দেয় না তবে আপনার কাছে দুটি বিকল্প রয়েছে, প্রতিটি দিরের জন্য স্ক্রিপ্ট তৈরি করুন বা স্ক্রিপ্টের ভিতরে কোনও ফাংশন তৈরি করুন, এরকম কিছু:

#!/bin/sh
MONITORDIR1="/path/to/the/dir/to/monitor1/"
MONITORDIR2="/path/to/the/dir/to/monitor2/"
MONITORDIRX="/path/to/the/dir/to/monitorx/"    

monitor() {
inotifywait -m -r -e create --format "%f" "$1" | while read NEWFILE
do
        echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "yourmail@addresshere.tld"
done
}
monitor "$MONITORDIR1" &
monitor "$MONITORDIR2" &
monitor "$MONITORDIRX" &

আমি নমুনা স্ক্রিপ্টে ব্যবহৃত কমান্ডগুলি সম্পর্কে বেশ কয়েকটি ব্যাখ্যা যুক্ত করতে ভুলে গিয়েছিলাম আমার উত্তর সম্পাদনা করার কারণটি ... আমি ওপেন বেশ কয়েকটি ডায়ার নিরীক্ষণ করতে চাইলে স্ক্রিপ্টটিও যুক্ত করেছি। ইনোটাইফয়েট সরঞ্জাম সম্পর্কে, প্রশ্নের উল্লেখ না করেই প্রশ্নের উত্তর দেওয়া অসম্ভব কারণ অপ্ট ইনোটিফাই-টুলস ব্যবহার করছে। যাইহোক, আমি এখানে নবাগত তাই নেতিবাচকদের সম্পর্কে আমার আরও অনেক কিছু শিখতে হবে, সুতরাং দুঃখিত, আমার উত্তরটি যদি আপনার ওভারল্যাপ করে, তবে আমি যা চাইছিলাম তা নয় আমি কেবল ওপিকে একটি সম্পূর্ণ উত্তর দিতে চাই। আবার, দুঃখিত।
সাহসানু

কোনও সমস্যা নেই এবং এসইউতে স্বাগতম। নেটিওয়েট সম্পর্কে শেখা সাধারণত কঠোরভাবে করা হয়, কারণ এটি সত্যই কোথাও সংজ্ঞায়িত হয়নি।
harrymc

4
@ সাহসানু আমি পুরো "নেটিওয়েট" বিষয়টির সাথে একমত নই। প্রতিটি ব্যক্তি সেখানকার নিজস্ব দৃষ্টিকোণ থেকে প্রশ্নের উত্তর দিচ্ছেন। উত্তরগুলির মধ্যে কোনও ওভারল্যাপ নেই, আবার এমন কোনও উত্তরও নেই যা আবার লেখা হয়েছিল। প্রশ্নটি যখন সুনির্দিষ্ট হয় তখন উত্তরগুলির পক্ষে সেভাবে আলাদা হওয়া অসম্ভব। মহান বিস্তারিতভাবে প্রশ্নের উত্তর দিতে সময় দেওয়ার জন্য আপনাকে অনেক ধন্যবাদ। এটি আপনার মতো জানার চেয়ে আরও বেশি সাহায্য করেছে, কেবল এই সমস্ত সম্পর্কে শিখছেন like আপনি আমাকে অসংখ্য ঘন্টা বাঁচিয়েছেন।
ডেভিড কস্টার


একটি বিকশিত পরিবেশে নেটিয়্যাকে একেবারে সংজ্ঞায়িত করা যায় না answers এই সাইটটিতে প্রচলিত আছে যে উত্তরগুলি খারাপভাবে লেখা না হয় সেগুলি অনুলিপি না করে এবং তারপরেও সম্পাদনার মাধ্যমে পরিবর্তে এগুলি সংশোধন করতে উত্সাহ দেওয়া হয়। গণতান্ত্রিক সম্প্রদায়ের সম্মতি না রাখাই সর্বদা আপনার অধিকার। @ সাহসানু তাঁর স্ক্রিপ্টটি দেখানোর সময় আমার পূর্ববর্তী উত্তরগুলি উল্লেখ করে আমার মন্তব্য এড়াতে পারতেন, যা কোনও ক্ষেত্রেই আপনার অনুমোদন অর্জন করতে পারত। আমি তার জায়গায় এটিই করতাম এবং এটি আমার ভাগ্নে, যা আমি বিশ্বাস করি যে আমি অন্যের সাথে ভাগ করে নিই (তবে অবশ্যই সবার সাথে নয়)।
harrymc

8

ইনোটাইফয়েট ব্যবহার করুন , উদাহরণস্বরূপ:

inotifywait -m /path -e create -e moved_to |
    while read path action file; do
        echo "The file '$file' appeared in directory '$path' via '$action'"
        # do something with the file
    done

আরও তথ্য এবং উদাহরণগুলির জন্য নিবন্ধটি দেখুন
ফাইল সিস্টেমের ইভেন্টগুলিতে স্ক্রিপ্টগুলি ট্রিগার করতে ইনোটাইফাই-সরঞ্জামগুলি কীভাবে ব্যবহার করবেন


1
যদি কেউ এটি ব্যবহার করে এবং বড় হাতের মধ্যে থেকে পরিবর্তনগুলি রূপান্তরিত করে, আপনি কিছুক্ষণের মধ্যে কিছু কমান্ড চালাতে সক্ষম হবেন না। কারণ আপনি $ PATH ভেরিয়েবলটি ওভাররাইট করতে পারবেন।
সেভেজম্যান

2
আপনার নিজের ভেরিয়েবলের জন্য বড় হাতের পরিবর্তনশীল নামের ব্যবহার @Savageman হয় জোরালোভাবে এই কারণে অবিকল নিরুৎসাহিত। বড় হাতের অক্ষরগুলি সিস্টেমের ব্যবহারের জন্য সংরক্ষিত থাকে; আপনার নিজস্ব ভেরিয়েবলগুলি ছোট হাতের ব্যবহার করা উচিত।
ট্রিপলি

@ ট্রিপলী তথ্যের জন্য ধন্যবাদ, আপার কেস
ওয়ার্স

0

বেশ কয়েকটি ডিরেক্টরিতে আপনি এটি করতে পারেন:

#!/bin/bash


monitor() {
  inotifywait -m -r -e attrib --format "%w%f" --fromfile /etc/default/inotifywait | while read NEWFILE
  do
     echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "yourmail@addresshere.tld"
  done
          }


monitor &

এখানে ফাইলের ফোল্ডারের একটি উদাহরণ তালিকা রয়েছে /etc/default/inotifywait /etc/default/inotifywait

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