我正在尝试将网络摄像头图片文件组织到文件夹中,否则我会在一个文件夹中收到数千张图片。
我有一个脚本 foscam-move.sh (来自创建子目录并按日期组织文件)与以下内容:
#!/bin/bash
for x in *.jpg; do
d=$(date -r "$x" +%Y-%m-%d)
mkdir -p "$d"
mv -- "$x" "$d/"
done
我的脚本位于包含所有 .jpg 文件的文件夹中。
当我在终端中运行它时,一切都很好,并且组织得很好。
当我添加以下 cron 任务时,它不会运行。
* * * * * /home/pi/Desktop/FI9821W_************/snap/foscam-move.sh # JOB_ID_2
我将其设置为每分钟运行一次,因为这台相机会拍摄很多照片。
如何让 cron 每分钟运行我的脚本?
答案1
cron 的运行环境与您的用户不同。它可能有问题,因为它不在正确的目录中。在执行循环之前,将脚本放置cd
到包含图像的目录中for
。
答案2
Cron 作业以当前工作目录作为用户的主目录启动。
当您执行脚本时,它不会自动将工作目录更改为脚本的父目录。为此,您需要cd
在脚本中执行以下操作:
#! /bin/sh -
cd -P -- "$(dirname -- "$0")" || exit
# rest of your script that has nothing bash-specific in it
# by the way.
或者,由于该脚本并不特定于您要运行它的文件夹,因此请将其存储在通用位置(例如~/bin
)并将目录路径作为参数传递:
#! /bin/sh -
cd -P -- "${1?no directory provided}" || exit
# ...