首先,这是我第一次编写 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等待您引用的页面:
- 创造
在监视的目录中创建了文件或目录。
- 关闭写入
监视的文件或监视目录中的文件在以可写模式打开后被关闭。这并不一定意味着该文件已被写入。