使用inotifywait上传后转换jpg文件

使用inotifywait上传后转换jpg文件

首先,这是我第一次编写 bash 脚本,所以如果这是微不足道的,我深表歉意。我正在尝试设置一个手表,以便每次jpg将文件上传到特定文件夹时,它都会转换为webp使用cwebp.在谷歌搜索网络后,似乎使用 inotifywait 是最好的方法(如果不正确,请告诉我)。阅读 bash 脚本手册并inotify等待页面我设法编写了这段代码:

inotifywait -m /home/ben -e create -e moved_to |
    while read path action file; do
        # echo "The file '$file' appeared in directory '$path' via '$action'"
        if [[ $file = *.jpg ]]
        then
             cwebp $file -o $file.webp
        fi
    done

当我使用示例mv命令时,这是有效的,但是当使用上面的代码时,我收到此错误:

Could not read 0 bytes of data from file test.jpg
Error! Could not process file test.jpg
Error! Cannot read input picture file 'test.jpg'

如果我cwebp test.jpg -o test.jpg.webp单独运行该命令,它执行时不会出现任何错误。我究竟做错了什么?这个在文件创建后触发,为什么cwebp得到0字节?

答案1

您使用的 inotifywait 脚本-e create不是使用-e close_write;不同之处在于创建事件将在数据写入文件之前触发;因此,cwebp“文件中有 0 字节数据”。

来自inotify等待您引用的页面:

  • 创造

在监视的目录中创建了文件或目录。

  • 关闭写入

监视的文件或监视目录中的文件在以可写模式打开后被关闭。这并不一定意味着该文件已被写入。

相关内容