将文件夹中的文件排序到带日期的文件夹中

将文件夹中的文件排序到带日期的文件夹中

我正在尝试将网络摄像头图片文件组织到文件夹中,否则我会在一个文件夹中收到数千张图片。

我有一个脚本 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
# ...

相关内容