【发布时间】:2016-07-06 10:34:09
【问题描述】:
我正在 MEAN 堆栈中开发应用程序。当新图像上传到服务器时,我想创建一个图像大小调整和裁剪脚本作为后台进程。
脚本监视文件夹中的新图像上传并对其进行裁剪。
我更喜欢将 Linux shell 脚本编写为守护进程。
我使用以下想法来完成任务。 - 新图像上传到它写入 photolog.txt 文件的服务器上,我可以在其中逐行抓取图像。 - 我在 watch.sh shell 脚本文件中阅读了 photolog.txt。 - 它逐行迭代,直到到达 EOL。 - 新文件再次到达,它将附加到 EOL。 - 我设法通过tail命令获取更新的文件,并在命令行中获取最新的添加文件显示。到此代码为止,它很有魅力。
现在我成功抓取了服务器上新添加的文件的图片列表。但主要问题是我无法将 tail 命令的输出存储在变量中,它必须对我来说是因为无论我得到什么输出都是文件名的完整路径,它将在 imagemagick 裁剪命令中使用。
Imagemagick 中心裁剪并缩放图像。
convert -define file-type:size=widthxheight original_filename -thumbnail 120x120^ -gravity center -extent 100x100 resize_filename
watch.sh
#!/bin/bash
path="/var/www/html/AppBite/trunk/photolog.txt"
cat $path | \
until false
do
# If file exists
if [[ -f "$path" ]]
then
while IFS= read -r photo
do
imageFormat=`identify $photo | awk '{print $2}'`
imageScale=`identify $photo | awk '{print $3}'`
echo "$photo $imageFormat $imageScale"
done
fi
# Continous monitor file changes via commandline
tail -f $path
done
我已成功获取命令行输出,但我无法将值存储在变量中,以供下次使用 imagemagick 图像处理命令。
或者建议我以其他方式持续监控文件夹以获取新添加的文件列表。
【问题讨论】: