我有一个包含来自网络摄像头的100张图片的文件夹。当网络摄像头发送新图片时,我希望这个更换0号并让所有其他jpg向上移动一个数字。我已经设置了一个脚本,其中inotify监视目录。将新文件放入此目录时,脚本会重新编号图片目录中的所有文件,重命名新上传的图片并将其放入文件夹中。 这个脚本'有点'有效。 '排序',因为有时它会做它应该做的事情,有时它抱怨丢失文件:
mv:无法统计`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 :(得分:1)
您正在执行以下mv命令:
mv webcam99.jpg webcam100.jpg
...
mv webcam1.jpg webcam2.jpg
缺少mv webcam0.jpg到webcam1.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