Shell指令:遠端資料夾拷貝
阿新 • • 發佈:2019-02-18
1 資料夾通過ftp拷貝到遠端機器上
ftp是不支援資料夾傳輸的(sftp可以),如果一定要通過ftp傳輸資料夾,可以有幾種策略:
(1)如果條件允許可以使用ftp軟體,FlashFTP,CuteFTP都是支援資料夾傳輸的。
(2)如果無法使用ftp工具可以使用考慮先打成壓縮包,然後傳過去解壓縮以後再移動到指定目錄,這是比較推薦的方式,但是會讓指令碼變得複雜一些,而且需要額外的壓縮和解壓縮時間。
(3)如果上面兩個條件都不允許,必須使用shell指令碼來完成這個任務,那麼可以參考下面的方法。
shell指令碼:
#! /bin/sh #bash ftpfloder.sh ip user pw /from /to if [ $# != 5 ] ; then echo "USAGE: $0 ip user pw /from /to" echo " e.g.: $0 ip user pw /from /to" exit 1; fi IP=$1 #伺服器IP user=$2 #ftp使用者名稱 password=$3 #ftp密碼 fromdir=$4 #源目錄 todir=$5 #目的目錄 dirs=`find $fromdir -type d -printf $todir/'%P\n'| awk '{if ($0 == "")next;print "mkdir " $0}'` files=`find $fromdir -type f -printf 'put %p %P \n'` ftp -nv $IP <<EOF user $user $password type binary prompt $ dirs cd $todir $ files quit EOF
呼叫這個指令碼的方法:
FTPTOOLPATH="/roo /ftpfolder.sh"
FROMPATH="/root /from" #要上傳的資料夾
TOPATH="/test/to" #目標資料夾
HOSTIP="10.80.59.1" #伺服器
user=root #ftp使用者名稱
password=271828#ftp密碼
bash $FTPTOOLPATH $ HOSTIP $user $password $ FTPTOOLPATH $ TOPATH
整體思路:這是一個很笨的方法,使用ftp進行資料夾拷貝不行那麼只好採取曲線救國的方式,先在目標目錄生成資料夾的結構,然後再在這個基礎上將需要傳輸的大量檔案逐個的傳過去。$dirs
當然這樣的操作存在一定的風險,那就是大量的檔案傳輸的時候有可能會有檔案損壞,在這一點上方法(3)是不及方法(2)的。
2 scp指令進行資料夾拷貝
scp是基於ssh登入的,較於1中完全使用FTP的操作起來要方便很多。但存在一個問題是scp是基於基於安全認證的檔案傳輸,無法在腳本里指定密碼,需要在指令執行後手動輸入密碼,這對靜默任務或者需要定時執行的任務來說是不適用的,但是對於單次任務來說是個不錯的選擇。
具體的使用是這樣的
scp [可選引數] file_source file_target
傳輸檔案:
scplocal_file remote_username@remote_ip:remote_folder
示例:
scp /home/daisy/[email protected]:/home/root
傳輸資料夾:
scp-r local_folder remote_username@remote_ip:remote_folder
示例: