Testing file existance isn't sufficient, the file transfert may be incomplete.
The following function test if a file is available
- File exist
- File is not used by a process
- File size is stable
Code:
#
# Function : is_file_arrived file
# Arg(s) : file = file to verify
# Output : None
# Status : 0 = yes file arrived, 1 = no
# Env. : VFA_WAIT : interval (secs) for file size check (def=5)
#
verify_file_arrival() {
[ -z "$1" ] && return 1
_ifa_File=$1
_ifa_Arrived=1
if [ -f "$_ifa_File" -a -z "`fuser $_ifa_File 2> /dev/null`" ] ; then
_ifa_Size1=`ls -l $_ifa_File 2>/dev/null | awk '{print $5}'`
sleep ${VFA_WAIT:-5}
_ifa_Size2=`ls -l $_ifa_File 2>/dev/null | awk '{print $5}'`
[ ${_ifa_Size1:-1} -eq ${_ifa_Size2:-2} ] && _ifa_Arrived=0
fi
return $_ifa_Arrived
}
#
# Main.
#
if is_file_arrived /home/dba/$DATA_FILENAME
then echo "Arrived"
else echo "Not arrived"
fi