ডিরেক্টরিটির বিষয়বস্তু আপডেট হয়ে গেলে কমান্ড কীভাবে চালানো যায়?


27

একটি ডিরেক্টরি রয়েছে Aযার বিষয়বস্তু অন্যান্য লোকেরা ঘন ঘন পরিবর্তিত হয়।

আমি একটি ব্যক্তিগত ডিরেক্টরি তৈরি করেছি Bযেখানে আমি আগে থাকা সমস্ত ফাইল রাখি A

বর্তমানে, আমি শুধু মাঝে মাঝে চালানো rsyncপেতে ফাইল থেকে ব্যাক আপ হওয়ার জন্য Aকরতে B। তবে আমি আশঙ্কা করি যে কিছু ফাইল যুক্ত হবে Aএবং তারপরে Aঅনুলিপি করার সুযোগ পাওয়ার আগেই তা সরিয়ে ফেলা হবে B

এটি থেকে রোধ করার সর্বোত্তম উপায় কী? আদর্শভাবে, আমি আমার বর্তমান ব্যাকআপ স্ক্রিপ্টটি প্রতিবারের সামগ্রীর Aপরিবর্তন করার জন্য চালাতে চাই ।

উত্তর:


29

যদি আপনি ইনোটিফাই-সরঞ্জামগুলি ইনস্টল করেন inotifywaitতবে কোনও ফাইল বা ডিরেক্টরিতে লিখিত থাকলে আপনি কোনও ক্রিয়া ট্রিগার করতে ব্যবহার করতে পারেন :

#!/bin/sh
dir1=/path/to/A/
while inotifywait -qqre modify "$dir1"; do
    /run/backup/to/B 
done

যেখানে -qqস্যুইচ সম্পূর্ণ নীরব, -rপুনরাবৃত্ত হয় (যদি প্রয়োজন হয়) এবং -eএক্ষেত্রে নিরীক্ষণের ইভেন্ট modify। থেকে man inotifywait:

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

5
incrondআগ্রহেরও হতে পারে।
শন জে গফ

1
কুল। আমি কি কেবল আমার বাশার্কে উপরের স্ক্রিপ্টটি রেখে দেব যাতে লগ ইন করার সময় এটি চলে? আমি অন্য সময় এটি চালিয়ে যেতে পারে কি অন্য উপায় আছে?
ওডামস

লগইনের জন্য, হ্যাঁ /etc/profileসিস্টেম ব্যাপী বা .bash_profileকেবল আপনার ব্যবহারকারীর জন্য। বুট করার পরে এটি চালানোর জন্য, এটি আপনার ইউনিক্স / লিনাক্সের গন্ধের উপর নির্ভর করে; /etc/rc.local, /etc/rc.d/বা/etc/init.d/
জেসনওয়ারিয়ান

1
বৃহত্তর ডিরেক্টরিগুলির জন্য আপনি --monitorস্যুইচটি ব্যবহার করে বিবেচনা করতে চাইতে পারেন (এবং পরিবর্তে আপনার inotifywait
লুপটিতে

কোনও FTP সার্ভারের মাধ্যমে ডিরেক্টরি ট্রিতে যুক্ত হওয়া প্রতিটি ফাইলের জন্য কোনও স্ক্রিপ্ট চালানোর জন্য এই সমাধানটি কীভাবে নির্ভরযোগ্যভাবে কাজ করবে (আসুন আমরা বলি যে গড়ে প্রতি 3 মিনিটে একটি নতুন ফাইল যুক্ত হয় এবং এটি বছরের পর বছর ধরে চলতে পারে)? খুব যদি না হয়, বিকল্প সমাধান আছে?
নিকোলা নোভাক

5

কড়া কথা বললে, কেউ যদি কোনও ফাইল ফেলে দেয় এবং খুব তাড়াতাড়ি এটি সরিয়ে দেয় তবে আপনি এটি মিস করতে পারেন। ইনোটিফাই ব্যবহার (লিনাক্সের অধীনে, বা অন্যান্য ইউনিটের অধীনে একই বৈশিষ্ট্য) এর ব্যবহার ঝুঁকির উইন্ডোটিকে ছোট করে তোলে।

যদি আপনি সেই ডিরেক্টরিতে আপনার পছন্দের ফাইল সিস্টেমটি মাউন্ট করতে পারেন (আমি বুঝতে পারি এটি কোনও বিকল্প নাও হতে পারে), আপনি এমন একটি ফাইল রাখতে পারেন যা সমস্ত ফাইল সংস্করণ রেকর্ড করে, উদাহরণস্বরূপ কপিফেস


4

ব্যবহার করে দেখুন entrকম্যান্ড-লাইন টুল ফাইল পরিবর্তন যা অবাধ কমান্ড রান করতে পারেন। ২.৯ প্রকাশের পরে, ডিরেক্টরিতে -dএকটি নতুন ফাইল যুক্ত করা হলে ইভেন্টগুলির প্রতিক্রিয়া দেখানোর জন্য একটি ডিরেক্টরি ওয়াচ অপশন ( ) যুক্ত করা হয়েছিল।

প্রকল্পে কোনও নতুন ফাইল যুক্ত হলে ইউটিলিটি চালানোর উদাহরণ:

$ while true; do
> echo src/* | entr -d your_command
> done

ডিরেক্টরি ওয়াচ মোডে প্রতিটি ফাইলের পিতামহ নির্দেশিকা স্পষ্টভাবে ওয়াচ তালিকায় যুক্ত করা হয়।

এর একমাত্র প্রভাবটি হ'ল যদি কোনও নতুন ফাইল উপস্থিত হয় তবে বাহ্যিক শেল লুপটি ফাইল সিস্টেমটিকে পুনরায় চালু করার অনুমতি দিতে প্রস্থান করতে হবে।

ডিরেক্টরি দেখার অপশন ছাড়া সংস্করণটি এখানে রয়েছে:

$ while true; do
> echo src/* src | entr your_command
> done

আপনার প্রয়োজনের উপর নির্ভর করে এখানে একটি সহজ উদাহরণ রয়েছে:

$ ls -d * | entr sh -c 'rsync -vuar A B'

আরও তথ্যের জন্য এনট্রপ্রজেক্ট.অর্গ ওয়েবসাইট চেক করুন:


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