[UPDATE]
#!/usr/bin/env bash
shopt -s nullglob #to make '("$src_dir"*.300)' works
src_dir="/exports/files/" #don't forget trailing slash /
dest_dir="/exports/files/arch/" #don't forget trailing slash /
err_f="/tmp/error.txt"
mv_f="/tmp/moved.log" #record moved file in case network down
email="[email protected]"
touch "$err_f" #bcoz we use >> apppend
touch "$mv_f" #bcoz we use tee -a append
if [ ! -d "$src_dir" ]; then echo|mailx -s "Error: directory $src_dir not exist" "$email" 2>>"$err_f"; exit 1; fi
if [ ! -d "$dest_dir" ]; then echo|mailx -s "Error: directory $dest_dir not exist" "$email" 2>>"$err_f"; exit 1; fi
{
f=("$src_dir"*.300)
for ((i=0; i < ${#f[@]}; i+=1)); do
mv -f "${f[i]}" "$dest_dir" 2>>"$err_f"; #-f do not prompt
if [ $? -eq 0 ]; then
if [ "$i" -eq 0 ]; then echo "$(date +"%Y-%m-%d %H:%M:%S")"; echo "The following files has been moved from $src_dir to $dest_dir"; echo; fi
echo "$((i+1))." "$(basename "${f[i]}")" 'moved'; echo;
else
echo| mailx -s "Error: $(<"$err_f")" "$email" 2>>"$err_f"; break
fi
done
} | tee -a "$mv_f" | mailx -E -s "The following files has been moved" "$email" 2>>"$err_f"
Exemplo da caixa de entrada de email screeshoot:
E-mail recebido quando erro mv
:
E-mailrecebidoquandomv
desucesso:
/tmp/moved.log para registrar os arquivos movidos e /tmp/error.txt para registrar todos os erros, ambos os arquivos usados para manter registros de log até rede para baixo :
Nota:
- Vocênãodeveanalisarasaídade
ls
- mailx-Eparaevitarocorpovazio,paraqueelenãosejaenviadosenenhumarquivoformovido
- mailxsomenteumse
mv
encontrarerro,usandobreak
paraquebrarantes,emvezdeexit1
,porqueaindaqueremossaberqualarquivofoimovidoantesqueoerroocorra. - Avantagemde
cmd;if[$?-eq0]
compararcomimplicitamenteifcmd
équevocêpodemodificá-lofacilmenteparaalgumoutrocomandoquepossaexigirumcódigoderetornodiferente. - Vocêdeveremovermanualmenteosarquivos/tmp/error.txte/tmp/moved.logqueserãoanexadosdetemposemtempos.
Referência: