जब निर्देशिका सामग्री बदलती है (Centos) - linux, bash, shell, inotify जब फ़ाइल नामों को बढ़ाने के लिए खोल स्क्रिप्ट

मेरे पास एक फ़ोल्डर है जिसमें से 100 चित्र हैंवेबकैम। जब वेबकैम एक नई तस्वीर भेजता है, तो मैं चाहता हूं कि यह नंबर 0 को प्रतिस्थापित करे और अन्य सभी jpg के एक नंबर को ऊपर ले जाएं। मैंने एक स्क्रिप्ट स्थापित की है जहां एक निर्देशिका को मॉनिटर करता है। जब इस निर्देशिका में एक नई फ़ाइल डाली जाती है, तो स्क्रिप्ट चित्र निर्देशिका में सभी फ़ाइलों को किराए पर लेती है, नई अपलोड की गई तस्वीर का नाम बदलती है और इसे बाकी फ़ोल्डर में रखती है। यह स्क्रिप्ट "तरह का" काम करता है। "सॉर्ट करें", क्योंकि कभी-कभी ऐसा होता है जो इसे करना होता है और कभी-कभी यह गायब फाइलों के बारे में शिकायत करता है:

mv: stat 'webcam1.jpg' नहीं हो सकता है: ऐसी कोई फ़ाइल या निर्देशिका नहीं

कभी-कभी यह केवल एक फ़ाइल के बारे में शिकायत करता है,कभी-कभी 4 या 5. बेशक मैंने सुनिश्चित किया कि सभी 100 फाइलें थीं, स्क्रिप्ट चलाने से पहले ठीक से नामित किया गया था। स्क्रिप्ट चलाने के बाद, जिन फाइलों की शिकायत होती है वे वास्तव में गायब हैं। यह स्क्रिप्ट है, जिस संस्करण में मैंने निर्देशिकाओं के पूर्ण पथ का परीक्षण किया है, निश्चित रूप से उपयोग किया जाता है।

#!/bin/bash
dir1= /foo # directory to be watched
while inotifywait -qqre modify "$dir1"; do
cd /f002 #directory where the images are
for i in {99..1}
do
j=$(($i+1))
f1a=".jpg"
f1="webcam$i$f1a"
f2="test"
f2="webcam$j$f1a"
mv $f1 $f2
done
rm webcam100.jpg
mv dir1/*.jpg /f002/webcam0.jpg
done

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

उत्तर:

उत्तर № 1 के लिए 1

आप निम्नलिखित एमवी कमांड निष्पादित कर रहे हैं:

mv webcam99.jpg webcam100.jpg
...
mv webcam1.jpg webcam2.jpg

Webcam1.jpg पर mv webcam0.jpg गुम है। "$ Dir" में पहले परिवर्तन के साथ आपके पास निम्न फ़ाइलें / foo2 हैं:

webcam99.jp
...
webcam2.jpg
webcam0.jpg

बाद में "$ dir" परिवर्तन के साथ आप निम्नलिखित होंगे:

webcam99.jp
...
webcam3.jpg
webcam0.jpg

दूसरे शब्दों में - आप webcam0.jpg पर webcam1.jpg पर जाने के लिए भूल रहे हैं। मैं आपकी स्क्रिप्ट को इस तरह संशोधित करूंगा:

rm webcam99.jpg
for i in {98..0}
do
j=$(($i+1))
f1a=".jpg"
f1="webcam$i$f1a"
f2="test"
f2="webcam$j$f1a"
mv $f1 $f2
done
mv dir1/*.jpg /f002/webcam0.jpg

संबंधित सवाल
सबसे लोकप्रिय