2013-05-14 2 views
0

У меня есть папка, содержащая 100 изображений с веб-камеры. Когда веб-камера отправляет новое изображение, я хочу, чтобы это заменило номер 0, и все остальные jpg переместились на один номер. Я установил скрипт, где inotify контролирует каталог. Когда новый файл помещается в этот каталог, скрипт renumbers все файлы в каталоге изображений, переименовывает новое загруженное изображение и помещает его в папку вместе с остальными. Этот сценарий «вроде» работает. «Сорт», потому что иногда он делает то, что он должен делать, и иногда он жалуется на отсутствующие файлы:сценарий оболочки для увеличения имен файлов при изменении содержимого каталога (centos)

мв: не может стат `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 

Мне также нужно выполнить некоторую проверку ошибок, но пока я не понимаю, почему у нее отсутствуют файлы, которые есть.

+0

Вы копируете новый файл под именем 'webcam1.jpg' или' webcam0.jpg'. Потому что, как только внутренняя для цикла закончится, у вас будут файлы, начинающиеся с 'webcam2.jpg', и если вы скопируете новый как' webcam0.jpg', то у вас действительно есть 'webcam1.jpg' missing – abasu

ответ

1

Вы выполняете следующие мв команды:

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

мв webcam0.jpg к webcam1.jpg отсутствует. С первого изменения в "$ реж" вы имеете следующие файлы в/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 
+0

Хорошая точка, что объясняет один часть проблемы. Я изменю это, спасибо. – ArjenA

+0

Я также сделал еще одну ошибку, вызвав «модификацию» в inotify, выполнив сценарий дважды, один раз при создании нового jpg и снова при удалении. Это также вызывает ошибки. Я изменил модификацию, чтобы создать. Все еще ошибки (случайные отсутствующие файлы), пока я не удалю qqr из inotify. – ArjenA