新しいファイルをコピーしてメールを送信する

新しいファイルをコピーしてメールを送信する

.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

おすすめ記事