Process new or changed files
Jump to navigation
Jump to search
In this example I check for all files in a source directory, create an MD5 hash, search for the hash in a database, if not found add the file to the database, copy the file to the destination, send an email with a list of files that were processed.
newfilesdate=$(date +%Y-%m-%d) mkdir /tmp/workingdir find /mnt/source/ -type f > /tmp/woringdir/filelist while read line do line2=$(md5sum "$line" | sed 's/\ /---/' | sed 's/\ //') date=$(ls -l --time-style="+%Y-%m-%d" "$(awk 'BEGIN {FS="---"}; {print $2}' <<<"$line2")" | awk '{print $6}') hash=$(awk 'BEGIN {FS="---"}; {print $1}' <<<"$line2") filename=$( echo "$(awk 'BEGIN {FS="---"}; {print $2}' <<<"$line2")" | sed "s|.*/||;s|\ |\\\ |g;s|"\'"|\\\'|g") moddate=$(awk 'BEGIN {FS="---"}; {print $3}' <<<"$line2") query="$( echo "use database_name; select * from table_name where MD5 = '$hash';" | mysql -u user_name)" if ! grep -qi $hash <<<$query; then echo "use database_name; insert into table_name (name,mod_date,move_date,MD5) values ('$filename','$newfilesdate','$date','$hash');" | mysql -u user_name cp "$line" /mnt/destination/ echo "$line" >> /tmp/workingdir/copied fi done < /tmp/workingdir/filelist if [ -a /tmp/workingdir/copied ]; then sed -i 's|^.*\/||g' /tmp/workingdir/copied echo "Subject: "Files copied" | cat - /tmp/workingdir/copied | /usr/sbin/sendmail -r your_relay_email@domain.tld youremail@domain.tld fi rm -rf /tmp/workingdir