ड्रॉपबॉक्स फ़ोल्डर में लोड होने पर फ़ाइल को स्थानांतरित करने के लिए inotifywait का उपयोग करें


12

मैं जैसे ही CentOS पर मेरे ड्रॉपबॉक्स में प्रकट होता है, किसी फ़ाइल को तुरंत किसी अन्य फ़ोल्डर में ले जाने का तरीका खोजने का प्रयास कर रहा हूं।

मैंने कुछ सुरागों के लिए इंटरनेट को स्कैन किया है, लेकिन मुझे इस तथ्य से आगे नहीं मिल सकता है कि मुझे inotifyएक स्क्रिप्ट को लागू करने के लिए उपयोग करने की आवश्यकता है जो फ़ाइल के प्रकट होने पर उसे संसाधित करेगी।

मेरा BASH ज्ञान बहुत सीमित है और मुझे संदेह है कि मैं इसे PHP में लिख सकता हूं।

दूसरे शब्दों में, जैसे ही यह प्रयोग होता है मैं किसी फ़ाइल को दूसरे फ़ोल्डर में कैसे स्थानांतरित कर सकता हूं inotify?


क्या फ़ाइल का नाम लगातार प्रेडिक्टेबल है? या यह स्थान है? अधिक विस्तार से मददगार होगा ...
jasonwryan 22

@jasonwryan यह एक ड्रॉपबॉक्स फ़ोल्डर है, इसलिए स्थान सुसंगत है। और यह उस फ़ोल्डर में गिराई गई किसी भी फाइल पर लागू होता है ।
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

उन फ़ाइलों के प्रकारों के बारे में अधिक विवरण के साथ, जिन्हें आप स्थानांतरित करना चाहते थे, आप कुछ जाँच, लॉगिंग आदि जोड़ सकते हैं ...


मैं सुझाए गए उत्तरों में से किसी का भी परीक्षण नहीं कर पाया। बातें सामने आईं। ऐसा ASAP करेगा! हालांकि, मेरे पास भी प्रश्न हैं। अगर मैं इसे एक bash फ़ाइल में रखूं और इसे चलाऊं, तो मुझे लगता है कि यह पृष्ठभूमि में चलेगा, सही? मुझे हमेशा यह महसूस होता है कि एक स्क्रिप्ट 1 बार चलने वाली चीज़ है, लेकिन यहाँ इनोटिफ़ाइटवाइट सही रहता है?
Ortix92

2
createईवेंट पर सुनना सही नहीं है, क्योंकि आप mvएक फाइल पर करेंगे, जो डिस्क पर पूरी तरह से कॉपी नहीं हो सकती है। close_writeइसके बजाय घटना का उपयोग करके @ जवाब देखें ।
fduff

3
@fduff देखकर गिल्स का जवाब हमेशा सही होता है ...
jasonwryan

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
@DennisWilliamson हाँ, inotifywaitइस तरह से कष्टप्रद है। आप कुछ का उपयोग कर सकते हैं //%f, क्योंकि फ़ाइल नाम में दोहरा स्लैश नहीं होगा जब तक कि देखने का मार्ग नहीं होता; इसके बाद झुंझलाहट परसिंग की तरफ है।
गाइल्स का SO- बुराई पर रोक '22
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.