2013-05-14 123 views
0

我有一個文件夾,其中包含來自網絡攝像頭的100張圖片。當網絡攝像頭髮送一張新照片時,我希望這個替換爲0,並讓所有其他JPG都向上移動一個數字。我已經建立了一個腳本,inotify監視一個目錄。將新文件放入此目錄時,腳本會重新編號圖片目錄中的所有文件,重新命名新上傳的圖片並將其放入文件夾中。 這個腳本'排序'的作品。 「排序」,因爲有時它做什麼,它應該做的,有時它會抱怨缺少的文件:shell腳本在目錄內容更改時遞增文件名(centos)

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 

我也需要實現一些錯誤檢查,但現在我不明白爲什麼它丟失了那裏的文件。

+0

你是在複製名爲'webcam1.jpg'或'webcam0.jpg'的新文件。因爲一旦inner for循環結束,你將有從'webcam2.jpg'開始的文件,並且如果你將新文件複製爲'webcam0.jpg',那麼你確實有'webcam1.jpg'缺少 – abasu 2013-05-14 09:04:25

回答

1

您正在執行以下命令的MV:

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

的MV webcam0.jpg到webcam1.jpg缺失。隨着第一個變化爲「$目錄」有以下文件/ foo2的:

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

與隨後的「$目錄」改變你具備以下條件:

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 2013-05-14 09:05:51

+0

我也犯了另一個錯誤,在inotify中調用'modify'會執行兩次腳本,一次是創建新的jpg,一次是刪除。這當然也會導致錯誤。我改變了修改來創建。仍然錯誤(隨機丟失的文件),直到我從inotify中刪除qqr。 – ArjenA 2013-05-14 11:02:20