Created
January 28, 2011 08:20
-
-
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)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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