フォルダ内のファイルを日付のあるフォルダに配置する

フォルダ内のファイルを日付のあるフォルダに配置する

Webカメラの写真ファイルをフォルダに整理しようとしています。それ以外の場合は、1 つのフォルダに数千枚の写真が表示されます。

私は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

このカメラは写真をたくさん撮るので、1分ごとに実行するように設定しました。

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
# ...

関連情報