Linux下使用Shell腳本實現FTP自動上傳和下載文件
登錄FTP實現下載文件功能
FTP服務器:192.168.0.199
FTP路徑:/ftphome/data
本地路徑:/local/data
將文件從FTP下載到本地的腳本如下:
批量下載腳本代碼
1 #從FTP上批量下載文件到本地 2 #!/bin/sh 3 ftp -v -n 192.168.0.199<<EOF 4 user ftpuser ftppwd 5 binary 6 cd /ftphome/downloadData 7 lcd /local/getDownloadData 8 prompt 9 mget * 10 bye 11 EOF 12 echo "download from ftp successfully"
下載單個文件腳本代碼
1 #從FTP上下載單文件到本地 2 #!/bin/sh 3 ftp -v -n 192.168.0.199<<EOF 4 user ftpuser ftppwd 5 binary 6 cd /ftphome/downloadData 7 lcd /local/getDownLoadData 8 prompt 9 #get test.txt 10 get test.txt 11 bye 12 EOF 13 echo "download from ftp successfully"
登錄FTP實現上傳文件功能
FTP服務器:192.168.0.199
FTP路徑:/ftphome/uploadData
本地路徑:/local/getUploadData
將文件從本地傳到FTP的腳本如下:
批量上傳腳本代碼
1 #從本地向FTP批量上傳文檔 2 #!/bin/sh 3 ftp -v -n 192.168.0.199<<EOF 4 user ftpuser ftppwd 5 binary 6 hash 7 cd /ftphome/uploadData 8 lcd /ftphome/getUploadData 9 prompt 10 mput * 11 bye 12 #here document 13 EOF 14 echo "commit to ftp successfully"
上傳單個文件腳本代碼
1 #從本地向FTP上傳單個文檔 2 #!/bin/sh 3 PUTFILE = test.txt 4 5 ftp -v -n 192.168.0.199<<EOF 6 user ftpuser ftppwd 7 binary 8 cd /ftphome/uploadData 9 lcd /ftphome/getUploadData 10 prompt 11 put $PUTFILE 12 bye 13 #here document 14 EOF 15 echo "commit to ftp successfully"
命令解釋
登錄FTP
1 ftp -i -n 192.168.0.199 << EOF
<< 是使用即時文件重定向輸入
EOF是即時文件的標志它必須成對出現,以標識即時文件的開始和結尾。
ftp常見的幾個標志有:
-d:使用調試模式,但必須編輯 /etc/syslog.conf 文件並添加以下中的一項:user.info FileName 或 user.debug FileName。 -g:禁用文件名中的元字符拓展,即取消全局文件名。 -i :關閉多文件傳輸中的交互式提示。 -n:防止在起始連接中的自動登錄。否則, ftp 命令會搜索 $HOME/.netrc 登錄項,該登錄項描述了遠程主機的登錄和初始化過程。 -v:顯示遠程服務器的全部響應,並提供數據傳輸的統計信息,即在程序運行時顯示詳細的處理信息。
輸入FTP用戶名和密碼
1 user ftpuser ftppwd
ftpuser:登錄FTP時的用戶名
ftppwd:登錄FTP時的密碼
通過binary命令傳輸文件
1 binary
FTP文件傳輸類型有: ascii、binary、ebcdic、image、local M 和 tenex。
– ascii:將文件傳輸類型設置為網絡 ASCII。此類型為缺省值,即默認使用ascii方式進行傳輸。
– binary:將文件傳輸類型設置為二進制映像。需要使用binary方式傳輸的文件類型有ISO文件、可執行文件、壓縮文件、圖片等。此類型可能比 ASCII 傳送更有效。
– ebcdic:將文件傳輸類型設為 EBCDIC。
– image:將文件傳輸類型設置為二進制映像。此類型可能比 ASCII 傳送更有效。
– local M:將文件傳輸類型設置為本地。M 參數定義每計算機字位的十進制數。此參數沒有缺省值。
– tenex:將文件傳輸類型設為 TENEX 機器需要的類型。
切換散列符號 (#) 打印
1 hash
當用get或put命令傳送一個數據塊時,讓FTP顯示一個#,這是看得見的確定數據在傳輸的信號,在用戶不確信網絡是否工作時有用。當傳輸很大的文件時,如果FTP已顯示這種信息,表示傳輸正在進行。hash命令是一個布爾變量式的命令,用hash命令打開顯示#開關,再用hash命令關閉顯示。
切換目錄
分別在本地和FTP上進入對應文件夾下:
到FTP上對應路徑(這里表示進入/ftphome/downloadData的文件夾下):
1 cd /ftphome/downloadData
到本地的對應路徑(這里表示在/ftphome/getDownloadData的文件夾下):
lcd /ftphome/getDownloadData
切換交互式提示
prompt
使用mget或mput時,prompt命令讓FTP在傳輸每個文件前進行提示,這樣防止覆蓋已有的文件。若發出prompt命令時已經啟動了提示,FTP將把提示關掉,此時再傳輸所有的文件則不會有任何提問。
文件傳輸
下載文件
下載多個文件:
格式:mget [remote-files]
例如:獲取遠端所在文件夾下所有文件
1 mget * 2 #或 3 mget *.*
注:mget . 每下載一個文件,都會有提示。如果要除掉提示,則在mget . 命令前先執行:prompt off。
下載單個文件:
格式:get [remote-file] [local-file]
例如:獲取遠端FTP上的text.txt文件
1 get a.txt
上傳文件
上傳多個文件:
格式:mput local-files
例如:將所在文件夾下所有文件上傳到FTP上
mput *
上傳單個文件:
格式:put local-file [remote-file]
例如:將本地text.txt文件上傳到遠端FTP上
1 put a.txt
斷開連接
1 bye
結束文件傳輸會話並退出 ftp 命令,與quit命令相同。
分界符標志
1 ... << EOF 2 #execute shell 3 EOF
EOF只是一個分界符標志,完全可以用abc, ! 等替換,也一樣的功能,只是大家都習慣用EOF來表示。
<<用法:當shell看到<<的時候,它就會知道下一個詞是一個分界符。在該分界符以后的內容都被當作輸入,直到shell又看到該分界符(位於單獨的一行)。因此分界符可以是定義的任何字符串。