2013-02-05 20 views
5

Witam mam niektóre ścieżki pliku jak /ifshk5/BC_IP/PROJEKT/T1 1073/T11073_RICljiR/Split/AG19_235/120225_I872_FCC0HN2ACXX_L8_RICljiRSYHSD2-1-IP AAPEK-17_1.fq.gzSCP i zdalne mkdir -p

Potrzebuję skopiować pliki z jednego serwera ftp na inny. a także trzeba utworzyć katalog, jeśli nie istnieje na serwerze. i zalogować się Sever, który zawiera te pliki a następnie uruchomić ten kod

#! /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 

ma jakiś problem, 1. nie może pracować zawsze pokazuje brak dostępu, spróbuj ponownie. ale kiedy bezpośrednim

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

może pracować, a nowa lokalizacja reż ma rację to pokazuje jak /opt/wznoszenia/Storage3/ftp/ftp_climb/100033/T11073_RICekkR/Fq/AS59_59304

+1

Dlaczego po prostu nie używać rsync? –

+0

czy możesz podać mi bardziej szczegółowe rozwiązanie? dzięki, – Jessesiu

Odpowiedz

5

Nie widzę, skąd może pochodzić błąd "odmowa uprawnień"; uruchom skrypt za pomocą bash -x, aby zobaczyć komendę, która powoduje błąd. Może to nie jest to, czego oczekujesz.

Sponsorowane rsync zamiast ponownie wynalezienie koła:

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

--dirs stworzy niezbędne foldery na zdalnej (i to daje dobre komunikaty o błędach, gdy coś się nie powiedzie).

To może być nawet możliwe, aby zrobić wszystko za pomocą jednego połączenia do rsync jeśli mają taką samą strukturę folderów na obu stronach:

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

Zanotuj / po ścieżkach! Nie pomijaj ich.

rsync ustali, które pliki należy przenieść i skopiować tylko te. Jeśli chcesz przesłać tylko podzbiór, użyj funkcji --include-from