Skip to content

Instantly share code, notes, and snippets.

@tdebarochez
Created January 28, 2011 08:20
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tdebarochez/799993 to your computer and use it in GitHub Desktop.
Save tdebarochez/799993 to your computer and use it in GitHub Desktop.
Upload to ftp server any new file in a folder. When is done, send a mail and/or an IM. Requirements are lftp, nail et sendxmpp (for IM sending)
#!/bin/sh
HOST="ftp.example.com"
USER="username"
PASSWD="pass"
DISTANT_PATH="/distant/path/"
LOCAL_PATH="/local/path/"
ERROR_LOG="/var/log/ftp-uploads/err.log"
INFOS_LOG="/var/log/ftp-uploads/infos.log"
INCLUDE_FILES="\.(txt|odt|png)$"
EXCLUDE_FILES="sample|\.part$"
MAIL_FROM="sender@example.com"
MAIL_TO="receiver1@example.com receiver2@example.com"
MAIL_SUBJECT="file uploaded"
MAIL_SMTP_SERVER="smtp.example.com"
JAB_TO="jid@example.com"
JAB_CONF="/opt/config/transmission-daemon/.sendxmpprc"
LOCAL_LIST=`find "$LOCAL_PATH" -type f | grep -Ei "$INCLUDE_FILES" | grep -Evi "$EXCLUDE_FILES" | sort`
DISTANT_LIST=`lftp -u "$USER,$PASS" -e "ls $DISTANT_PATH;bye" $HOST 2>> $ERROR_LOG`
push() {
FILE=$1
FILENAME=`basename $1`
echo "`date`: push $FILE to $HOST:$DISTANT_PATH$FILENAME"
lftp -u "$USER,$PASS" -e "cd $DISTANT_PATH;put $FILE;bye" $HOST >> $INFOS_LOG 2>> $ERROR_LOG
if [ ! -z $MAIL_TO ]; then
OLDIFS="$IFS"
IFS=$' '
for DEST in $MAIL_TO; do
echo "$FILENAME uploaded on $HOST" | env MAILRC=/dev/null smtp=$MAIL_SMTP_SERVER nail -s "$MAIL_SUBJECT" -r "$MAIL_FROM" "$DEST" >> $INFOS_LOG 2>> $ERROR_LOG
done
IFS="$OLDIFS"
fi
if [ ! -z $JAB_TO ]; then
echo "$FILENAME uploaded on $HOST" | sendxmpp -f $JAB_CONF $JAB_TO >> $INFOS_LOG 2>> $ERROR_LOG
fi
}
OLD_IFS="$IFS"
IFS=$'\n'
for FILE in $LOCAL_LIST; do
FILENAME=`basename $FILE | sed 's/\[/\\\[/g' | sed 's/\]/\\\]/g'`
echo $DISTANT_LIST | grep "$FILENAME" > /dev/null
[ "$?" -ne "0" ] && push `echo $FILE | sed 's/\ /\\\ /g' | sed 's/\[/\\\[/g' | sed 's/\]/\\\]/g'`
done;
IFS="$OLD_IFS"
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment