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

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

[ Hits: 13.374 ]

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

Compara colunas e mostra a maior

SCRIPT TESTE DE UPAR

Scritp de Firewall com Iptables

Ajuste Dinâmico do Governador de CPU no Linux

Criação de usuario / gerando senha automatica


  

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