.beta
あるディレクトリから別のディレクトリに拡張子を持つすべてのファイルをコピーしたら、次の形式で電子メールを送信したいと思います。
The following files have been moved from directory A to Directory B:
1. la.beta
2. pa.beta
そのファイルを見つけて正常に移動した場合にのみ電子メールを送信する必要があります。
これが私が今まで持っているものです。このスクリプトの問題は、ファイルが見つからないと次のエラーが発生することです。
mv: cannot stat `/home/zaree/*.beta': No such file or directory`
そして、ファイルが移動されなかったとしても電子メールが届きます。
#!/usr/bin/env bash
FROM_DIR='/home/zaree'
TO_DIR='/home/zaree/test'
FILE_FOUND=0
BODY=$(printf "$(date)\n\n")
BODY+=$(printf "The following files have been moved from\n")
BODY+=$(printf "%s\nto\n%s\n\n" "$FROM_DIR" "$TO_DIR")
for FILE in /home/zaree/*.beta; do
FILE_FOUND=1
mv $FILE /home/zaree/test
BODY+=$(printf "%s moved\n" "$FILE");
done
{
if (( $FILE_FOUND==1 )); then
printf "$BODY"
fi
} | mailx -s "Dev-Script" [email protected]
ベストアンサー1
次の行を前に追加してくださいfor FILE in...
。
shopt -s nullglob
これにより、ファイルを見つけることなくループに一度入るのを防ぎます。あなたの場合、ループが入力され、*.beta
コマンドmv
はループを*.beta
ターゲットディレクトリに移動しようとします。
以下は、部品が行に最もよく追加され、1に等しい場合にのみ実行されることです。| mailx -s "Dev-Script" [email protected]
printf $BODY
$FILE_FOUND