gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:23:18 24 4
gpt4 key购买 nike

我有一个文件夹,其中包含来自网络摄像头的 100 张图片。当网络摄像头发送一张新图片时,我希望这张图片替换数字 0 并让所有其他 jpg 向上移动一个数字。我已经设置了一个脚本,其中 inotify 监视一个目录。将新文件放入此目录时,脚本会重新编号图片目录中的所有文件,重命名新上传的图片并将其与其余图片一起放入文件夹中。这个脚本“有点”有效。 “有点”,因为有时它会做它应该做的事情,有时它会提示丢失文件:

mv: cannot 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

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

最佳答案

您正在执行以下 mv 命令:

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

缺少 webcam0.jpg 到 webcam1.jpg 的 mv。第一次更改“$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

关于linux - 目录内容更改时增加文件名的 shell 脚本 (centos),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16538367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com