2013-02-05 49 views
5

hi tôi có một số đường dẫn tập tin như /ifshk5/BC_IP/DỰ ÁN/T1 1073/T11073_RICljiR/chia/AG19_235/120225_I872_FCC0HN2ACXX_L8_RICljiRSYHSD2-1-IP AAPEK-17_1.fq.gzscp và mkdir -p xa

tôi cần sao chép các tập tin từ một máy chủ FTP khác. và cũng cần phải tạo thư mục nếu nó không tồn tại trong máy chủ. tôi login vào sever, trong đó có những tập tin sau đó chạy mã này

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

nó có một số vấn đề, 1. nó không thể làm việc luôn luôn hiển thị cho phép từ chối, hãy thử lại. nhưng khi tôi trực tiếp loại

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

nó có thể làm việc, và vị trí dir mới là đúng nó cho thấy như /opt/leo/Storage3/ftp/ftp_climb/100.033/T11073_RICekkR/Fq/AS59_59304

+1

Tại sao không chỉ sử dụng rsync? –

+0

bạn có thể cho tôi giải pháp chi tiết hơn không? cảm ơn, – Jessesiu

Trả lời

5

Tôi không thấy nơi lỗi "cho phép bị từ chối" có thể đến từ; chạy tập lệnh với bash -x để xem lệnh gây ra lỗi. Có lẽ nó không phải là những gì bạn mong đợi.

Cũng thử rsync thay vì phát minh ra bánh xe một lần nữa:

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

--dirs sẽ tạo ra các thư mục cần thiết ở phía xa (và nó sẽ cung cấp cho bạn các thông báo lỗi tốt khi có điều gì không).

Nó thậm chí có thể có thể làm mọi thứ với một cuộc gọi duy nhất để rsync nếu bạn có cấu trúc thư mục giống nhau trên cả hai mặt:

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

Lưu ý / sau những con đường! Đừng bỏ qua chúng.

rsync sẽ chỉ ra tệp nào cần được truyền và chỉ sao chép những tệp đó. Nếu bạn chỉ muốn chuyển một tập hợp con, hãy sử dụng --include-from