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

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

[ Hits: 13.052 ]

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 "%[email protected]%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 "%[email protected]%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

Gerador de PPP para USB (Palm OS e Pocket PC)

script para travar usuario discado

Gerência do tempo de inicialização das MFs de uma nuvem privada com o OpenNebula

Atualizando /home dos usuários em rede.(GNOME)

Adicionando usuários


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts