Shell腳本實現FTP上傳下載文件

Linux下使用Shell腳本實現FTP自動上傳和下載文件

登陸FTP實現下載文件功能

FTP服務器:10.11.10.11
FTP路徑:Down
本地路徑: ./
將文件從FTP下載到本地的腳本以下:linux

批量下載腳本代碼

#從FTP上批量下載文件到本地
#!/bin/sh
ftp -v -n 10.11.10.11<<EOF
user ftpuser ftppwd
binary
cd Down
lcd ./
prompt
mget *
bye
EOF
echo "download from ftp successfully"

下載單個文件腳本代碼

#從FTP上下載單文件到本地
#!/bin/sh
ftp -v -n 10.11.10.11<<EOF
user ftpuser ftppwd
binary
cd Down
lcd ./
prompt
#get down.txt
get down.txt note.txt
bye
EOF
echo "download from ftp successfully"

登陸FTP實現上傳文件功能

FTP服務器:10.11.10.11
FTP路徑:Up
本地路徑: ./
將文件從本地傳到FTP的腳本以下:web

批量上傳腳本代碼

#從本地向FTP批量上傳文檔
#!/bin/sh
ftp -v -n 10.11.10.11<<EOF
user ftpuser ftppwd
binary
hash
cd Up
lcd ./
prompt
mput *
bye
#here document
EOF
echo "commit to ftp successfully"

上傳單個文件腳本代碼

#從本地向FTP上傳單個文檔
#!/bin/sh
PUTFILE = up.txt
ftp -v -n 10.11.10.11<<EOF
user ftpuser ftppwd
binary
cd Up
lcd ./
prompt
put $PUTFILE
bye
#here document
EOF
echo "commit to ftp successfully"

命令解釋

登陸FTP

ftp -i -n 10.11.10.11 << EOF

<< 是使用即時文件重定向輸入
EOF是即時文件的標誌它必須成對出現,以標識即時文件的開始和結尾。
ftp常見的幾個標誌有:shell

-d:使用調試模式,但必須編輯 /etc/syslog.conf 文件並添加如下中的一項:user.info FileName 或 user.debug FileName。
-g:禁用文件名中的元字符拓展,即取消全局文件名。
-i :關閉多文件傳輸中的交互式提示。
-n:防止在起始鏈接中的自動登陸。不然, ftp 命令會搜索 $HOME/.netrc 登陸項,該登陸項描述了遠程主機的登陸和初始化過程。
-v:顯示遠程服務器的所有響應,並提供數據傳輸的統計信息,即在程序運行時顯示詳細的處理信息。bash

輸入FTP用戶名和密碼

user ftpuser ftppwd

ftpuser:登陸FTP時的用戶名
ftppwd:登陸FTP時的密碼服務器

經過binary命令傳輸文件

binary

FTP文件傳輸類型有: ascii、binary、ebcdic、image、local M 和 tenex。markdown

– ascii:將文件傳輸類型設置爲網絡 ASCII。此類型爲缺省值,即默認使用ascii方式進行傳輸。
– binary:將文件傳輸類型設置爲二進制映像。須要使用binary方式傳輸的文件類型有ISO文件、可執行文件、壓縮文件、圖片等。此類型可能比 ASCII 傳送更有效。
– ebcdic:將文件傳輸類型設爲 EBCDIC。
– image:將文件傳輸類型設置爲二進制映像。此類型可能比 ASCII 傳送更有效。
– local M:將文件傳輸類型設置爲本地。M 參數定義每計算機字位的十進制數。此參數沒有缺省值。
– tenex:將文件傳輸類型設爲 TENEX 機器須要的類型。網絡

切換散列符號 (#) 打印

hash

當用get或put命令傳送一個數據塊時,讓FTP顯示一個#,這是看得見的肯定數據在傳輸的信號,在用戶不確信網絡是否工做時有用。當傳輸很大的文件時,若是FTP已顯示這種信息,表示傳輸正在進行。hash命令是一個布爾變量式的命令,用hash命令打開顯示#開關,再用hash命令關閉顯示。svg

切換目錄

分別在本地和FTP上進入對應文件夾下:
到FTP上對應路徑(這裏表示進入Dwon文件夾下):ui

cd ./Down

到本地的對應路徑(這裏表示在當前文件夾下):spa

lcd ./

切換交互式提示

prompt

使用mget或mput時,prompt命令讓FTP在傳輸每一個文件前進行提示,這樣防止覆蓋已有的文件。若發出prompt命令時已經啓動了提示,FTP將把提示關掉,此時再傳輸全部的文件則不會有任何提問。

文件傳輸

下載文件

下載多個文件:
格式:mget [remote-files]
例如:獲取遠端所在文件夾下全部文件

mget *
#或
mget *.*

注:mget . 每下載一個文件,都會有提示。若是要除掉提示,則在mget . 命令前先執行:prompt off。

下載單個文件:
格式:get [remote-file] [local-file]
例如:獲取遠端FTP上的a.txt文件

get a.txt

上傳文件

上傳多個文件:
格式:mput local-files
例如:將所在文件夾下全部文件上傳到FTP上

mput *

上傳單個文件:
格式:put local-file [remote-file]
例如:將本地a.txt文件上傳到遠端FTP上

put a.txt

斷開鏈接

bye

結束文件傳輸會話並退出 ftp 命令,與quit命令相同。

分界符標誌

... << EOF
#execute shell
EOF

EOF只是一個分界符標誌,徹底能夠用abc, ! 等替換,也同樣的功能,只是你們都習慣用EOF來表示。 <<用法:當shell看到<<的時候,它就會知道下一個詞是一個分界符。在該分界符之後的內容都被看成輸入,直到shell又看到該分界符(位於單獨的一行)。所以分界符能夠是定義的任何字符串。