fcp (ftp copy) - copia um ou mais arquivos via FTP

Publicado por Pedro Robson Leão 23/09/2004

[ Hits: 13.248 ]

Download fcp.sh




O script efetua copia de arquivos entre maquinas da rede similar ao comando rcp e/ou scp, o diferencial eh que o script utiliza o protocolo ftp para realizar esta copia.
O parametros de uso são similares ao do scp.

  



Esconder código-fonte

#!/usr/bin/bash

user=;
pass=;
server=;
dst=;
dst_name=;

debug=;

function _ftp() {
   host=${1};
   user=${2};
   pass=${3};
   method=${4};
   src_dir=${5};
   src_fil=${6};
   dst_dir=${7};
   dst_fil=${8};

   if [ ${method} == "put" ] ; then
      LCD=${src_dir};
      SRC=${dst_fil}
      CD=${dst_dir};
   else
      LCD=${dst_dir};
      SRC=${src_fil}
      CD=${src_dir};
   fi

   printf "%s %s - Remote directory now %s "  $host $src_fil ${CD};

   dbg=;
   [ ! -z ${debug} ] && dbg="d";

   ftp -${dbg}ni ${host} <<EOF
   user ${user} ${pass}
   lcd ${LCD}
   cd ${CD}
   ${method}  ${SRC}
   by
EOF
}

function isUrl() {
   echo ${1} | grep : >/dev/null
   return ${?};
}
function parseUser() {
   if echo ${1} | grep \@ >/dev/null ; then
      echo ${1/\@*/};   
   fi
}

function parseServer() {
   var=${1/*\@/};
   echo ${var/:*/};
}

function parseDir() {
   echo ${1/*:/};
}

function usage() {
   printf "Usage: %s [-d] files [[user]@server]:[dir] \n" $0
   exit 2;
}

[ $# == 0 ] && usage $0;

while getopts hd name ; do
        case $name in
                        d)   debug=1;;
                *)  usage $0;;
        esac
done

shift $(($OPTIND -1));

i=1;
declare -a src;

for file in ${*} ; do
   if [ ${i} -eq ${#} ] ; then
      dst=${file};   
   else
      src[${i}]=${file};
      i=$((i+1));
   fi
done

if isUrl ${dst} ; then
   user=$(   parseUser    ${dst} );
   server=$( parseServer  ${dst} );
   dst=$(    parseDir     ${dst} );

   if [ ! -d ${dst} ] ; then
      dst=$(          dirname    ${dst} );
      dst_name=$( basename    ${dst} );
   fi

   [ -z "${user}" ] && user=${LOGNAME};

   if [ -z "${pass}" ] ; then
      printf "%s@%s's password: " $user $server;
      read pass;
   fi
fi

method="put";

for ((i=1; i<${#}; i++)) ; do

   if isUrl ${src[$((i))]} ; then
      user=$(        parseUser    ${src[$((i))]} );
      server=$(      parseServer  ${src[$((i))]} );
      src[$((i))]=$( parseDir     ${src[$((i))]} );

      method="get";

      [ -z "${user}" ] && user=${LOGNAME};


      if [ -z "${pass}" ] ; then
         printf "%s@%s's password: " $user $server;
         read pass;
      fi
   fi

   for file in ${src[$((i))]} ; do
      #set -x
      _ftp ${server} ${user} ${pass} ${method} $( dirname ${file} ) $( basename ${file} ) ${dst} ${dst_name}; 
      #set +x
   done
done


Scripts recomendados

Simple AdAway para Android

TMARK v:0.1

Monitore vários servidores ao mesmo tempo com Apache + shellscript

Script para Newsletters

Sysinfo versão 0.7


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts