script de shell para incrementar los nombres de los archivos cuando cambia el contenido de un directorio (centos) - linux, bash, shell, inotify

Tengo una carpeta que contiene 100 imágenes de unacámara web. Cuando la cámara web envía una nueva imagen, quiero que esta reemplace el número 0 y que todos los demás jpg se muevan un número. He configurado un script donde inotify monitorea un directorio. Cuando se coloca un nuevo archivo en este directorio, el script vuelve a numerar todos los archivos en el directorio de imágenes, cambia el nombre de la nueva imagen cargada y la coloca en la carpeta con el resto. Este script "tipo de" funciona. "Más o menos", porque a veces hace lo que se supone que debe hacer y, a veces, se queja de archivos perdidos:

mv: no se puede establecer `webcam1.jpg": No existe ningún archivo o directorio

A veces se queja de un solo archivo,a veces 4 o 5. Por supuesto, me aseguré de que los 100 archivos estuvieran allí, nombrados correctamente antes de ejecutar el script. Después de ejecutar la secuencia de comandos, de hecho faltan los archivos de los que se queja. Esta es la secuencia de comandos, en la versión que probé, las rutas completas a los directorios se usan, por supuesto.

#!/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

También necesito implementar algunas comprobaciones de errores, pero por ahora no entiendo por qué faltan archivos que están allí.

Respuestas

1 para la respuesta № 1

Estás ejecutando los siguientes comandos mv:

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

El mv webcam0.jpg a webcam1.jpg falta. Con el primer cambio a "$ dir", tiene los siguientes archivos en / foo2:

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

Con el cambio posterior de "$ dir", tendrá lo siguiente:

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

En otras palabras, te estás olvidando de mover webcam0.jpg a webcam1.jpg. Yo modificaría tu script así:

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

Menú