Linux 目录内容更改时增加文件名的shell脚本(centos)

Linux 目录内容更改时增加文件名的shell脚本(centos),linux,bash,shell,inotify,Linux,Bash,Shell,Inotify,我有一个文件夹,里面有100张来自网络摄像头的图片。当网络摄像头发送新图片时,我希望这张图片取代数字0,并让所有其他jpg的图片向上移动一个数字。我已经设置了一个脚本,inotify在其中监视目录。当一个新文件被放入该目录时,脚本会对图片目录中的所有文件重新编号,重命名新上传的图片,并将其与其他图片一起放入文件夹。 这个脚本“有点”有效有点,因为有时它做它应该做的事情,有时它抱怨缺少文件: mv:无法统计'webcam1.jpg':没有这样的文件或目录 有时它只抱怨一个文件,有时是4个或5个。当

我有一个文件夹,里面有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

我还需要执行一些错误检查,但目前我不明白为什么会丢失那里的文件。

您正在执行以下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 

您正在以
webcam1.jpg
webcam0.jpg
的名称复制新文件吗。因为一旦内部for循环完成,您将拥有从
webcam2.jpg
开始的文件,如果您将新文件复制为
webcam0.jpg
,那么您确实有
webcam1.jpg
丢失的优点,这就解释了问题的一部分。我会更改的,谢谢。我还犯了另一个错误,在inotify中调用'modify'将执行两次脚本,一次是在创建新的jpg时,另一次是在删除时。当然,这也会导致错误。我将修改更改为创建。在我从inotify中删除qqr之前,仍然存在错误(随机丢失的文件)。