o cron não funciona com o mesmo ambiente que o seu usuário. É provável que tenha problemas porque não está no diretório correto. Tenha seu script cd
para o diretório que contém as imagens antes de executar o loop for
.
Estou tentando organizar os arquivos de fotos da minha webcam em pastas, caso contrário, recebo milhares de fotos em uma pasta.
Eu tenho um script foscam-move.sh (de Crie subdiretórios e organize arquivos por data ) com o seguinte:
#!/bin/bash
for x in *.jpg; do
d=$(date -r "$x" +%Y-%m-%d)
mkdir -p "$d"
mv -- "$x" "$d/"
done
Eu tenho o script localizado na pasta com todos os arquivos .jpg.
Quando eu o executo no terminal está tudo bem e ele organiza lindamente.
Quando eu adiciono a seguinte tarefa cron, ela não é executada.
* * * * * /home/pi/Desktop/FI9821W_************/snap/foscam-move.sh # JOB_ID_2
Eu tenho que definir a cada minuto porque esta câmera tira muitas fotos.
Como faço para o cron executar meu script a cada minuto?
As tarefas Cron são iniciadas com o diretório de trabalho atual sendo o diretório inicial do usuário.
Quando você executa um script, ele não altera automaticamente o diretório de trabalho para o pai do script. Para isso, você precisa fazer o cd
no script:
#! /bin/sh -
cd -P -- "$(dirname -- "$0")" || exit
# rest of your script that has nothing bash-specific in it
# by the way.
Ou, como esse script não é específico da pasta em que você deseja executá-lo, armazene-o em um local genérico (como ~/bin
) e passe o caminho do diretório como argumento:
#! /bin/sh -
cd -P -- "${1?no directory provided}" || exit
# ...