我想每天从网站上抓取相同的图像X分钟,最终制作出一段延时视频。
我的问题是:
- 设置抓取图像的时间表并
- 保存图像并将时间/日期作为文件名的一部分。
最好使用像 Python 这样的程序吗?
答案1
让我们使用你的头像作为示例(存到/opt/download-avatar
)
#!/bin/bash
URL="https://www.gravatar.com/avatar/554f043fa658cba9bbc2ee4c6d4e052d?d=identicon"
timestamp=$(date +%F_%T);
wget "$URL" -O "${timestamp}.png"
注意:最好将文件名保存为纪元秒数timestamp=$(date +%s)
创建一个每 5 分钟运行一次 cron 任务(存到/etc/cron.d/timelapse-avatar
)
#!/bin/sh
*/5 * * * * /opt/download-avatar
使脚本可执行
chmod +x /opt/download-avatar
sudo chmod 755 /etc/cron.d/timelapse-avatar
如果你不想使用,cron
那么只需(存到~/start-timelapse
)
#!/bin/bash
input="$1"
URL="https://www.gravatar.com/avatar/554f043fa658cba9bbc2ee4c6d4e052d?d=identicon"
if [ -z "$input" ]; then
echo "USAGE: $0 [interval in minutes]"
exit 1
else
interval=$((60*input));
fi
while [ 0 = 0 ]; do
timestamp=$(date +%s)
wget "$URL" -O "${timestamp}.png"
echo "Sleeping for $input minutes"
sleep "$interval"
done;
使可执行文件以 7 分钟为间隔运行
chmod +x ~/start-timelapse
cd ~
./start-timelapse 7
更新:
谢谢響克。
奈杰尔,默认情况下cron
运行为根用户。与这个问题无关,但从技术上讲,它以“特殊用户”身份运行,非交互运行,没有环境变量(例如)$PATH
,没有dbus
会话 ID,没有X
会话 ID 等。
~/
是用户主目录的简写(另请参阅环境变量$HOME
)。默认情况下用户,这将是例如,/home/nigel
但对于根,/root
因此这可能是计划任务已将其保存到/root/pdm-5min
。您可以使用:
wget "$URL" -O "/home/nigel/pdm-5min/${timestamp}.png"
但这些文件的所有者是根, 所以奈杰尔无法移动、删除、编辑它们,除非你授予自己权限根(或通过sudo
)
cron
因此,您可以选择以用户身份运行奈杰尔。
#!/bin/sh
*/5 * * * * nigel /opt/download-avatar
确保要保存的目录存在,可能需要直接在行前添加wget
:
mkdir -p /home/nigel/pdm-5min/
最后,请小心使用"
引号。使用它们以便变量保留空格(空格、制表符等),但要确保每个单引号或双引号都有匹配的引号,这不是可选的。