我正在开发MEAN堆栈中的应用程序。我想创建一个图像大小调整脚本&当新图像上传到服务器时,裁剪为后台进程。
脚本在文件夹中监视新图像上传并裁剪它。
我更喜欢将Linux shell脚本作为守护进程。
我使用了以下想法来完成任务。 - 在photolog.txt文件中写入服务器上的新图像上传,我可以逐行抓取图像。 - 我在watch.sh shell脚本文件中读到了photolog.txt。 - 它逐行迭代,直到达到EOL。 - 再次新文件到达它将附加到EOL。 - 我设法通过tail命令获取更新文件,并在命令行中显示最新的添加文件。这个代码很有魅力。
现在我成功获取了服务器上新添加文件的图像列表。但主要的问题是我无法在变量中存储tail命令的输出,并且它必须对我来说因为我得到的任何输出都是文件名的完整路径,它将在imagemagick crop命令中使用。
Imagemagick中心裁剪,缩放图像。
转换-define 文件类型: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图像处理命令。
或建议我以其他方式连续监控文件夹以获取新添加的文件列表。
答案 0 :(得分:6)
由于tail -f
未终止,因此您不希望在变量中捕获其输出。但是,既然你无论如何都要在循环中调用它,那就一遍又一遍地调用它:
OUT=`tail "$path"`
或使用现代语法:
OUT=$(tail "$path")