ftp_upload.sh 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #!/usr/bin/env bash
  2. #
  3. # Upload file(s) to FTP server
  4. #
  5. # Copyright (C) 2016 - 2018 Teddysun <[email protected]>
  6. #
  7. # Argument example:
  8. # 1) ./ftp_upload.sh filename
  9. # 2) ./ftp_upload.sh filename1 filename2 filename3 ...
  10. # 3) ./ftp_upload.sh "*.extension"
  11. # 4) ./ftp_upload.sh "*.extension1" "*.extension2"
  12. #
  13. ########## START OF CONFIG ##########
  14. # Local directory (current folder)
  15. LOCALDIR=$( pwd )
  16. # File to log the outcome of backups
  17. LOGFILE="/var/log/ftp_upload.log"
  18. # FTP server
  19. # Enter the Hostname or IP address below
  20. FTP_HOST=""
  21. # FTP username
  22. # Enter the FTP username below
  23. FTP_USER=""
  24. # FTP password
  25. # Enter the username's password below
  26. FTP_PASS=""
  27. # FTP server remote folder
  28. # Enter the FTP remote folder below
  29. # For example: public_html
  30. FTP_DIR=""
  31. ########## END OF CONFIG ##########
  32. log() {
  33. echo "$(date "+%Y-%m-%d %H:%M:%S")" "$1"
  34. echo -e "$(date "+%Y-%m-%d %H:%M:%S")" "$1" >> ${LOGFILE}
  35. }
  36. # Check ftp command
  37. check_command() {
  38. if [ ! "$(command -v "ftp")" ]; then
  39. log "ftp command is not installed, please install it and try again"
  40. exit 1
  41. fi
  42. }
  43. # Tranferring backup file to FTP server
  44. ftp_upload() {
  45. cd ${LOCALDIR} || exit
  46. [ -z ${FTP_HOST} ] && log "Error: FTP_HOST can not be empty!" && exit 1
  47. [ -z ${FTP_USER} ] && log "Error: FTP_USER can not be empty!" && exit 1
  48. [ -z ${FTP_PASS} ] && log "Error: FTP_PASS can not be empty!" && exit 1
  49. [ -z ${FTP_DIR} ] && log "Error: FTP_DIR can not be empty!" && exit 1
  50. echo "$@" | grep "*" > /dev/null 2>&1
  51. if [ $? -eq 0 ]; then
  52. ls $@ > /dev/null 2>&1
  53. [ $? -ne 0 ] && log "Error: [$@] file(s) not exists!" && exit 1
  54. else
  55. for f in $@
  56. do
  57. [ ! -f ${f} ] && log "Error: [${f}] not exists!" && exit 1
  58. done
  59. fi
  60. local FTP_OUT_FILE=("$@")
  61. log "Tranferring file(s) list below to FTP server:"
  62. for file in ${FTP_OUT_FILE[@]}
  63. do
  64. log "$file"
  65. done
  66. ftp -in ${FTP_HOST} 2>&1 >> ${LOGFILE} <<EOF
  67. user $FTP_USER $FTP_PASS
  68. binary
  69. lcd $LOCALDIR
  70. cd $FTP_DIR
  71. mput ${FTP_OUT_FILE[@]}
  72. quit
  73. EOF
  74. log "Tranfer to FTP server completed"
  75. }
  76. # Main progress
  77. STARTTIME=$(date +%s)
  78. [ $# -eq 0 ] && log "Error: argument can not be empty!" && exit 1
  79. check_command
  80. ftp_upload "$@"
  81. ENDTIME=$(date +%s)
  82. DURATION=$((ENDTIME - STARTTIME))
  83. log "All done"
  84. log "Transfer completed in ${DURATION} seconds"