2013-02-05 12 views
5

hi ho qualche percorso del file come /ifshk5/BC_IP/PROGETTO/T1 1073/T11073_RICljiR/split/AG19_235/120225_I872_FCC0HN2ACXX_L8_RICljiRSYHSD2-1-IP AAPEK-17_1.fq.gzSCP e mkdir -p remoto

ho bisogno di copiare file da un server FTP ad altri. e anche bisogno di creare una directory se non esiste nel server. faccio il login al sever che contiene questi file quindi eseguire questo codice

#! /bin/bash 

while read myline 
do 
    for i in $myline 
    do 
    if [ -f $i ] 
    then 
    location=$(echo "$i" | awk -F "/" '{ print "", $6, $7, $8 }' OFS="/") 
     #location shows /T11073_RICekkR/Fq/AS59_59304 
    location="/opt/CLiMB/Storage3/ftp/ftp_climb/100033"$location 
    echo $location 

    ssh [email protected] mkdir -p $location 
    scp -r $i [email protected]:$location 

    fi 
    done 
done < /ifshk5/BC_IP/PROJECT/T11073/T11073_all_3254.fq.list 

ha qualche problema, 1. non può funzionare sempre mostra il permesso negato, si prega di riprovare. ma quando ho diretto tipo

ssh [email protected] mkdir -p /sample/xxxx 

si può lavorare, e la nuova posizione dir è destra mostra come /opt/salita/Storage3/ftp/ftp_climb/100033/T11073_RICekkR/Fq/AS59_59304

+1

Perché non utilizzare solo rsync? –

+0

puoi darmi una soluzione più dettagliata? Grazie, – Jessesiu

risposta

5

Non vedo da dove possa venire l'errore "permesso negato"; eseguire lo script con bash -x per visualizzare il comando che causa l'errore. Forse non è quello che ti aspetti.

provare anche rsync invece di inventare di nuovo la ruota:

rsync --dirs $i [email protected]:$b 

--dirs creerà le cartelle necessarie sul lato a distanza (e vi darà buoni messaggi di errore quando qualcosa non riesce).

Potrebbe anche essere possibile fare tutto con una singola chiamata a rsync se avete la stessa struttura di cartelle su entrambi i lati:

rsync -avP /ifshk5/BC_IP/PROJECT/T11073/ [email protected]:/opt/CLiMB/Storage3/ftp/ftp_climb/100033/ 

Annotare il / dopo i sentieri! Non li omettere.

rsync individuerà quali file devono essere trasferiti e ne copia solo quelli. Se si desidera trasferire solo un sottoinsieme, utilizzare --include-from