যখন ড্রপবক্স ফোল্ডারে লোড হয় তখন ফাইলটি সরানোর জন্য ইনোটিফয়েট ব্যবহার করুন


12

আমি সেন্টস-এ আমার ড্রপবক্সে উপস্থিত হওয়ার সাথে সাথেই কোনও ফাইলটি অন্য ফোল্ডারে তত্ক্ষণাত সরিয়ে নেওয়ার একটি উপায় সন্ধান করার চেষ্টা করছি।

আমি কিছু সংকেতের জন্য ইন্টারনেটকে ছড়িয়ে দিয়েছি তবে আমার কোনও inotifyস্ক্রিপ্টের জন্য অনুরোধ করা দরকার যা ফাইলটি উপস্থিত হওয়ার সাথে সাথে প্রক্রিয়া করবে than

আমার বেস জ্ঞান খুব সীমাবদ্ধ এবং আমি সন্দেহ করি যে আমি এটি পিএইচপি-তে লিখতে পারি।

অন্য কথায়, ফাইলটি ব্যবহারের সাথে সাথেই অন্য ফোল্ডারে কীভাবে স্থানান্তর করতে পারি inotify?


ফাইলটির নাম কি ধারাবাহিকভাবে অনুমানযোগ্য? নাকি এর অবস্থান? আরও বিশদ সহায়ক হবে ...
জেসনওয়ারিয়ান

@ জেসনওয়ারিয়ান এটি একটি ড্রপবক্স ফোল্ডার তাই অবস্থানটি সামঞ্জস্যপূর্ণ। এবং এটি সেই ফোল্ডারে বাদ দেওয়া যে কোনও ফাইলের জন্য প্রযোজ্য ।
Ortix92

উত্তর:


13

এটি একটি সহজ পদ্ধতি:

#!/usr/bin/env bash

dir=/home/ortix/Dropbox/new/
target=/home/ortix/movedfiles/

inotifywait -m "$dir" --format '%w%f' -e create |
    while read file; do
        mv "$file" "$target"
    done

আপনি যে ধরণের ফাইল স্থানান্তর করতে চেয়েছিলেন সে সম্পর্কে আরও বিশদ সহ আপনি কিছু পরীক্ষা, লগিং ইত্যাদি যোগ করতে পারেন ...


আমি প্রস্তাবিত উত্তরের কোনওটিই পরীক্ষা করতে পারিনি। বিষয়গুলি উঠে এল। এএসএপ কি তাই করবে! যদি ও আমার একটি জিজ্ঞাসা ছিল. আমি যদি এটি কোনও বাশ ফাইলের মধ্যে রাখি এবং চালিত করি তবে আমি ধরে নিই যে এটি ব্যাকগ্রাউন্ডে চলবে, ঠিক? আমার সর্বদা অনুভূতি থাকে যে স্ক্রিপ্টটি 1 বার রান করার জিনিস, তবে এখানে ইনোটিফয়েট চলতে থাকে, ঠিক?
Ortix92

2
createইভেন্টে শোনা সঠিক নয়, কারণ আপনি এমন mvকোনও ফাইল করবেন যা ডিস্কে পুরোপুরি অনুলিপি করা যায় না। close_writeপরিবর্তে ইভেন্ট ব্যবহার করে @ গিলস উত্তর দেখুন ।
fduff

3
@ ফুফফ গিলস উত্তর দেখে সর্বদা সঠিক জিনিস
হ'ল

17

কমান্ডটি inotifywaitপ্রতিটি সময় নির্দিষ্ট ডিরেক্টরি পরিবর্তনের বিষয়বস্তুতে একটি বার্তা প্রিন্ট করে। আপনার সঠিক ইভেন্টটি বেছে নেওয়া দরকার: ফাইলটি তৈরি হওয়ার সময় নয়, যখন ড্রপবক্স এটি ডাউনলোড শেষ করে। ড্রপবক্স কীভাবে পরিচালনা করে আমি ঠিক জানি না। যদি এটি ফাইলটিকে তার চূড়ান্ত স্থানে লিখতে থাকে তবে close_writeইভেন্টগুলি শুনুন । যদি এটি ফাইলটিতে অস্থায়ী স্থানে লিখিত হয় এবং তারপরে এটি স্থানান্তরিত হয়, moved_toইভেন্টগুলি শোনো । অপশন প্রেরণ -m -qকরার জন্য inotifywaitযাতে এটি ইভেন্টের জন্য শোনা রাখে (ডিফল্ট অনুসারে, এটি শুধুমাত্র পরবর্তী ইভেন্ট জন্য অপেক্ষা) এবং শুধুমাত্র প্রাসঙ্গিক বার্তা ছাপে।

cd ~/Dropbox/myfolder
inotifywait -m -q -e close_write --format %f . | while IFS= read -r file; do
  cp -p "$file" /path/to/other/directory
done

1
এটি ফাইলগুলির জন্য ব্যর্থ হয় যা তাদের নামে নতুন লাইন অন্তর্ভুক্ত করে। আমি inotifywaitআউটপুট নাল-টার্মিনেটেড ফাইলের নাম রাখার উপায় খুঁজে পাচ্ছিলাম না । আমি যেটা করতে পারি তা হ'ল নিউলাইনের তুলনায় এমন একটি চরিত্র ব্যবহার করা যা উদাহরণস্বরূপ %f$'\001', এবং এর -d $'\001'সাথে while IFS= read -rবা ব্যবহার করে xargs
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

1
@ ডেনিস উইলিয়ামসন হ্যাঁ, inotifywaitএইভাবে বিরক্ত করছেন। আপনি এর মতো কিছু ব্যবহার করতে পারেন //%f, ফাইলের নামটিতে যতক্ষণ না দেখার পথ না থাকে ততক্ষণ কখনও ডাবল স্ল্যাশ থাকবে না; তাহলে বিরক্তি পার্সিংয়ের পক্ষে।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.