imagemagicks recognitionコマンドを使用して、破損したjpg画像を認識するスクリプトを作成しようとしています。スクリプトは出力で「破損した」という単語に対してgrepコマンドを実行し、ファイルが破損している場合は破損したフォルダに移動するか、ファイルが正常に表示されると入力フォルダに移動します。
端末ウィンドウでスクリプトを手動で実行すると、期待どおりに機能します。理想的には、このスクリプトをcronジョブとして実行したいのですが、cronjobで予約するとすべてが入力フォルダに移動するため、IF文が正しく評価されないようです。 cronjobとして機能するには、スクリプトで他のタスクを実行する必要がありますか?
#!/bin/bash
LANG=en_US.UTF-8
#variables for our folders
DROP_FOLDER=~/Desktop/Drop
CORRUPT_FOLDER=corrupt_images/
INPUT_FOLDER=Input/
cd $DROP_FOLDER
for f in *.jpg
do
if /opt/ImageMagick/bin/identify -verbose $f | /usr/bin/grep -iq "Corrupt"; then
mv "$f" $CORRUPT_FOLDER
else
mv "$f" $INPUT_FOLDER
fi
done
crontabでスケジュールを予約しています
*/2 * * * * cd ~ && ./myscript.sh
ベストアンサー1
cronジョブとしてスクリプトを追加する場合、スクリプトを実行しているcronユーザーは、スクリプトのテストに使用できる一般ユーザーアカウントとは異なります。
その後、このコマンドが実行されたとき
DROP_FOLDER=~/Desktop/Drop
ランタイム拡張はcronユーザー(rootなど)の~
ためであるため、それを目的のディレクトリのフルパスに置き換える必要があります。$HOME
DROP_FOLDER=~/Desktop/Drop