通过飞牛 NAS 定时任务 + Shell 脚本 每天下载保存Bing最新壁纸
运行关系:
飞牛 NAS
│
└── 用户 crontab
│
└── 每天 00:05
│
▼
/bin/bash /vol2/1000/Download/BingWallpaper/bing_wallpaper.sh
│
├── 获取 Bing 当日图片
├── 尝试 UHD
├── UHD 失败 → 1920×1080
├── 保存到 UHD/
└── 日志保存到 bing_wallpaper.log
一、先确认目录
先 SSH 登录飞牛 NAS,执行:
mkdir -p /vol2/1000/Download/BingWallpaper/UHD
然后检查:
ls -ld /vol2/1000/Download/BingWallpaper
ls -ld /vol2/1000/Download/BingWallpaper/UHD
二、创建自动下载脚本
创建:
/vol2/1000/Download/BingWallpaper/bing_wallpaper.sh
#!/bin/bash
# ==============================
# Bing 每日 UHD 壁纸自动下载
# 飞牛 NAS
# ==============================
# 壁纸保存目录
SAVE_PATH="/vol2/1000/Download/BingWallpaper/UHD"
# 日志文件
LOG_FILE="/vol2/1000/Download/BingWallpaper/bing_wallpaper.log"
# 日志保留天数
LOG_DAYS=30
# 创建目录
mkdir -p "$SAVE_PATH"
# ==============================
# 日志函数
# ==============================
log() {
echo "[$(TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
}
# ==============================
# 清理旧日志
# 保留最近 30 天(按文件修改时间)
# ==============================
clean_old_logs() {
if [ -f "$LOG_FILE" ]; then
# 获取文件修改时间(Unix时间戳)
if command -v stat >/dev/null 2>&1; then
FILE_MTIME=$(stat -c %Y "$LOG_FILE" 2>/dev/null)
else
# 如果stat不可用,使用find
find "$LOG_FILE" -mtime +"$LOG_DAYS" -delete 2>/dev/null
return
fi
if [ -n "$FILE_MTIME" ]; then
CURRENT_TIME=$(date +%s)
FILE_AGE_DAYS=$(( (CURRENT_TIME - FILE_MTIME) / 86400 ))
if [ "$FILE_AGE_DAYS" -gt "$LOG_DAYS" ]; then
rm -f "$LOG_FILE"
touch "$LOG_FILE"
fi
fi
fi
}
clean_old_logs
# ==============================
# 检查依赖
# ==============================
if ! command -v curl >/dev/null 2>&1; then
log "❌ 错误:未找到 curl"
exit 1
fi
if ! command -v jq >/dev/null 2>&1; then
log "❌ 错误:未找到 jq"
exit 1
fi
# ==============================
# 获取 Bing 壁纸信息
# ==============================
API="https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN"
log "========================================"
log "开始执行 Bing 每日壁纸任务"
PIC=$(curl -fL \
--retry 5 \
--retry-all-errors \
--connect-timeout 15 \
--max-time 60 \
-A "Mozilla/5.0" \
-s \
"$API") || {
log "❌ 获取 Bing 壁纸信息失败"
exit 1
}
# ==============================
# 解析 JSON
# ==============================
DATE=$(echo "$PIC" | jq -er '.images[0].startdate') || {
log "❌ 获取壁纸日期失败"
exit 1
}
URLBASE=$(echo "$PIC" | jq -er '.images[0].urlbase') || {
log "❌ 获取壁纸 URL 失败"
exit 1
}
TITLE=$(echo "$PIC" | jq -r '.images[0].title // "Bing"')
# ==============================
# 清理文件名
# ==============================
SAFE_TITLE=$(echo "$TITLE" | sed 's#[/:*?"<>|\\]#_#g')
[ -n "$SAFE_TITLE" ] || SAFE_TITLE="Bing"
FILE="$SAVE_PATH/${DATE}@${SAFE_TITLE}.jpg"
TMP_FILE="$FILE.tmp"
# ==============================
# 检查当天是否已经下载
# ==============================
if [ -s "$FILE" ]; then
SIZE=$(du -h "$FILE" | cut -f1)
log "今日壁纸已经存在,跳过下载"
log "文件:$FILE"
log "大小:$SIZE"
log "========================================"
exit 0
fi
log "日期:$DATE"
log "标题:$TITLE"
# ==============================
# 构造图片地址
# ==============================
UHD_URL="https://cn.bing.com${URLBASE}_UHD.jpg"
HD_URL="https://cn.bing.com${URLBASE}_1920x1080.jpg"
# ==============================
# 清理临时文件
# ==============================
trap 'rm -f "$TMP_FILE"' EXIT
# ==============================
# 优先下载 UHD
# ==============================
log "尝试下载 UHD..."
if curl -fL \
--retry 5 \
--retry-all-errors \
--connect-timeout 15 \
--max-time 300 \
-A "Mozilla/5.0" \
-s \
-o "$TMP_FILE" \
"$UHD_URL" \
&& [ -s "$TMP_FILE" ]; then
mv -f "$TMP_FILE" "$FILE"
SIZE=$(du -h "$FILE" | cut -f1)
log "✅ UHD 下载成功"
log "文件大小:$SIZE"
log "保存位置:$FILE"
# ==============================
# UHD 失败,降级到 1920x1080
# ==============================
else
log "⚠️ UHD 下载失败,尝试 1920x1080..."
rm -f "$TMP_FILE"
if curl -fL \
--retry 5 \
--retry-all-errors \
--connect-timeout 15 \
--max-time 300 \
-A "Mozilla/5.0" \
-s \
-o "$TMP_FILE" \
"$HD_URL" \
&& [ -s "$TMP_FILE" ]; then
mv -f "$TMP_FILE" "$FILE"
SIZE=$(du -h "$FILE" | cut -f1)
log "⚠️ 1920x1080 下载成功"
log "文件大小:$SIZE"
log "保存位置:$FILE"
else
log "❌ UHD 和 1920x1080 均下载失败"
rm -f "$TMP_FILE"
exit 1
fi
fi
# 统计已下载总数
TOTAL=$(find "$SAVE_PATH" -name "*.jpg" 2>/dev/null | wc -l)
log "已累计下载:$TOTAL 张壁纸"
log "========================================"
log "下载任务完成"
exit 0
三、给脚本执行权限
执行:
chmod +x /vol2/1000/Download/BingWallpaper/bing_wallpaper.sh
chmod 755 /vol2/1000/Download/BingWallpaper/bing_wallpaper.sh
然后手动运行一次:
/vol2/1000/Download/BingWallpaper/bing_wallpaper.sh
如果成功,应该能看到类似:
========================================
开始执行 Bing 每日壁纸任务
日期:......
标题:......
尝试下载 UHD...
✅ UHD 下载成功
文件大小:......
保存位置:/vol2/1000/Download/BingWallpaper/UHD/20260xxx@xxxx.jpg
已累计下载:xxx 张壁纸
========================================
下载任务完成
然后检查:
ls -lh /vol2/1000/Download/BingWallpaper/
ls -lh /vol2/1000/Download/BingWallpaper/UHD/
四、飞牛设置每天自动执行
编辑:
crontab -e
在最后增加:
#每天北京时间 00:05 执行
5 0 * * * /bin/bash /vol2/1000/Download/BingWallpaper/bing_wallpaper.sh
保存退出:
然后检查:
crontab -l
应该看到:
5 0 * * * /bin/bash /vol2/1000/Download/BingWallpaper/bing_wallpaper.sh

Comments NOTHING