❶ ftp 上的文件 如何復制下來
FTP 是 TCP/IP 協議組中的協議之一,是英文File Transfer Protocol的縮寫。該協議是Internet文件傳送的基礎,它由一系列規格說明文檔組成,目標是提高文件的共享性,提供非直接使用遠程計算機,使存儲介質對用戶透明和可靠高效地傳送數據。簡單的說,FTP就是完成兩台計算機之間的拷貝,從遠程計算機拷貝文件至自己的計算機上,稱之為「下載(download)」文件。若將文件從自己計算機中拷貝至遠程計算機上,則稱之為「上載(upload)」文件。在TCP/IP協議中,FTP標准命令TCP埠號為21,Port方式數據埠為20。FTP協議的任務是從一台計算機將文件傳送到另一台計算機,它與這兩台計算機所處的位置、聯接的方式、甚至是是否使用相同的操作系統無關。假設兩台計算機通過ftp協議對話,並且能訪問Internet, 你可以用ftp命令來傳輸文件。每種操作系統使用上有某一些細微差別,但是每種協議基本的命令結構是相同的。 FTP的傳輸有兩種方式:ASCII傳輸模式和二進制數據傳輸模式。 1.ASCII傳輸方式:假定用戶正在拷貝的文件包含的簡單ASCII碼文本,如果在遠程機器上運行的不是UNIX,當文件傳輸時ftp通常會自動地調整文件的內容以便於把文件解釋成另外那台計算機存儲文本文件的格式。 但是常常有這樣的情況,用戶正在傳輸的文件包含的不是文本文件,它們可能是程序,資料庫,字處理文件或者壓縮文件(盡管字處理文件包含的大部分是文本,其中也包含有指示頁尺寸,字型檔等信息的非列印字元)。在拷貝任何非文本文件之前,用binary 命令告訴ftp逐字拷貝,不要對這些文件進行處理,這也是下面要講的二進制傳輸。 2.二進制傳輸模式:在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執行文件到Windows系統,在對方系統上,此文件不能執行。 如果你在ASCII方式下傳輸二進制文件,即使不需要也仍會轉譯。這會使傳輸稍微變慢 ,也會損壞數據,使文件變得不能用。(在大多數計算機上,ASCII方式一般假設每一字元的第一有效位無意義,因為ASCII字元組合不使用它。如果你傳輸二進制文件,所有的位都是重要的。)如果你知道這兩台機器是同樣的,則二進制方式對文本文件和數據文件都是有效的。 5. FTP的工作方式 FTP支持兩種模式,一種方式叫做Standard (也就是 PORT方式,主動方式),一種是 Passive (也就是PASV,被動方式)。 Standard模式 FTP的客戶端發送 PORT 命令到FTP伺服器。Passive模式FTP的客戶端發送 PASV命令到 FTP Server。 下面介紹一個這兩種方式的工作原理: Port模式FTP 客戶端首先和FTP伺服器的TCP 21埠建立連接,通過這個通道發送命令,客戶端需要接收數據的時候在這個通道上發送PORT命令。 PORT命令包含了客戶端用什麼埠接收數據。在傳送數據的時候,伺服器端通過自己的TCP 20埠連接至客戶端的指定埠發送數據。 FTP server必須和客戶端建立一個新的連接用來傳送數據。 Passive模式在建立控制通道的時候和Standard模式類似,但建立連接後發送的不是Port命令,而是Pasv命令。FTP伺服器收到Pasv命令後,隨機打開一個高端埠(埠號大於1024)並且通知客戶端在這個埠上傳送數據的請求,客戶端連接FTP伺服器此埠,然後FTP伺服器將通過這個埠進行數據的傳送,這個時候FTP server不再需要建立一個新的和客戶端之間的連接。 很多防火牆在設置的時候都是不允許接受外部發起的連接的,所以許多位於防火牆後或內網的FTP伺服器不支持PASV模式,因為客戶端無法穿過防火牆打開FTP伺服器的高端埠;而許多內網的客戶端不能用PORT模式登陸FTP伺服器,因為從伺服器的TCP 20無法和內部網路的客戶端建立一個新的連接,造成無法工作。
❷ shell腳本ftp到遠程目錄
1.下載遠程電信機房中機器上已打包好的數據.這個不難,一條語句搞定.
復制代碼代碼如下:
wget
ftp://user_name:password@ip_address:port/dir/file_name
2.定時任務,需要寫個腳本,並加入定時任務中.
a.腳本.假設你計劃將遠程的文件備份到/var/www/html/back目錄下,到這個目錄下,新建文件,內容如下
復制代碼代碼如下:
!#/bin/sh
cd
/var/www/html/back/
wget
ftp(上面那條語句)
保存為bak.sh
b.加入定時任務.直接vi
/etc/crontab
在最後一行加入如下語句
復制代碼代碼如下:
30
18
*
*
*
root
/var/www/html/back/bak.sh(腳本保存的位置)
這樣每天下午6:30本地的centos機器自動會將遠程FTP的文件備份到/var/www/html/back中了.
❸ 求一個增量備份遠程FTP伺服器的數據的腳本
FTPRush(FTP客戶端)
你在需要備份的機器上打開
然後定義計劃任務,自動上傳的文件
就會自動按時執行了
❹ 用python寫測試腳本,從本地傳文件至ftp遠程路徑
轉自:http://news.tuxi.com.cn/kf/article/jhtdj.htm
本文實例講述了python實現支持目錄FTP上傳下載文件的方法。分享給大家供大家參考。具體如下:
該程序支持ftp上傳下載文件和目錄、適用於windows和linux平台。
#!/usr/bin/envpython
#-*-coding:utf-8-*-
importftplib
importos
importsys
classFTPSync(object):
conn=ftplib.FTP()
def__init__(self,host,port=21):
self.conn.connect(host,port)
deflogin(self,username,password):
self.conn.login(username,password)
self.conn.set_pasv(False)
printself.conn.welcome
deftest(self,ftp_path):
printftp_path
printself._is_ftp_dir(ftp_path)
#printself.conn.nlst(ftp_path)
#self.conn.retrlines('LIST./a/b')
#ftp_parent_path=os.path.dirname(ftp_path)
#ftp_dir_name=os.path.basename(ftp_path)
#printftp_parent_path
#printftp_dir_name
def_is_ftp_file(self,ftp_path):
try:
ifftp_pathinself.conn.nlst(os.path.dirname(ftp_path)):
returnTrue
else:
returnFalse
exceptftplib.error_perm,e:
returnFalse
def_ftp_list(self,line):
list=line.split('')
ifself.ftp_dir_name==list[-1]andlist[0].startswith('d'):
self._is_dir=True
def_is_ftp_dir(self,ftp_path):
ftp_path=ftp_path.rstrip('/')
ftp_parent_path=os.path.dirname(ftp_path)
self.ftp_dir_name=os.path.basename(ftp_path)
self._is_dir=False
ifftp_path=='.'orftp_path=='./'orftp_path=='':
self._is_dir=True
else:
#thisuescallbackfunction,thatwillchange_is_dirvalue
try:
self.conn.retrlines('LIST%s'%ftp_parent_path,self._ftp_list)
exceptftplib.error_perm,e:
returnself._is_dir
returnself._is_dir
defget_file(self,ftp_path,local_path='.'):
ftp_path=ftp_path.rstrip('/')
ifself._is_ftp_file(ftp_path):
file_name=os.path.basename(ftp_path)
#如果本地路徑是目錄,下載文件到該目錄
ifos.path.isdir(local_path):
file_handler=open(os.path.join(local_path,file_name),'wb')
self.conn.retrbinary("RETR%s"%(ftp_path),file_handler.write)
file_handler.close()
#如果本地路徑不是目錄,但上層目錄存在,則按照本地路徑的文件名作為下載的文件名稱
elifos.path.isdir(os.path.dirname(local_path)):
file_handler=open(local_path,'wb')
self.conn.retrbinary("RETR%s"%(ftp_path),file_handler.write)
file_handler.close()
#如果本地路徑不是目錄,且上層目錄不存在,則退出
else:
print'EROOR:Thedir:%sisnotexist'%os.path.dirname(local_path)
else:
print'EROOR:Theftpfile:%sisnotexist'%ftp_path
defput_file(self,local_path,ftp_path='.'):
ftp_path=ftp_path.rstrip('/')
ifos.path.isfile(local_path):
file_handler=open(local_path,"r")
local_file_name=os.path.basename(local_path)
#如果遠程路徑是個目錄,則上傳文件到這個目錄,文件名不變
ifself._is_ftp_dir(ftp_path):
self.conn.storbinary('STOR%s'%os.path.join(ftp_path,local_file_name),file_handler)
#如果遠程路徑的上層是個目錄,則上傳文件,文件名按照給定命名
elifself._is_ftp_dir(os.path.dirname(ftp_path)):
print'STOR%s'%ftp_path
self.conn.storbinary('STOR%s'%ftp_path,file_handler)
#如果遠程路徑不是目錄,且上一層的目錄也不存在,則提示給定遠程路徑錯誤
else:
print'EROOR:Theftppath:%siserror'%ftp_path
file_handler.close()
else:
print'ERROR:Thefile:%sisnotexist'%local_path
defget_dir(self,ftp_path,local_path='.',begin=True):
ftp_path=ftp_path.rstrip('/')
#當ftp目錄存在時下載
ifself._is_ftp_dir(ftp_path):
#如果下載到本地當前目錄下,並創建目錄
#下載初始化:如果給定的本地路徑不存在需要創建,同時將ftp的目錄存放在給定的本地目錄下。
#ftp目錄下文件存放的路徑為local_path=local_path+os.path.basename(ftp_path)
#例如:將ftp文件夾a下載到本地的a/b目錄下,則ftp的a目錄下的文件將下載到本地的a/b/a目錄下
ifbegin:
ifnotos.path.isdir(local_path):
os.makedirs(local_path)
local_path=os.path.join(local_path,os.path.basename(ftp_path))
#如果本地目錄不存在,則創建目錄
ifnotos.path.isdir(local_path):
os.makedirs(local_path)
#進入ftp目錄,開始遞歸查詢
self.conn.cwd(ftp_path)
ftp_files=self.conn.nlst()
forfileinftp_files:
local_file=os.path.join(local_path,file)
#如果fileftp路徑是目錄則遞歸上傳目錄(不需要再進行初始化begin的標志修改為False)
#如果fileftp路徑是文件則直接上傳文件
ifself._is_ftp_dir(file):
self.get_dir(file,local_file,False)
else:
self.get_file(file,local_file)
#如果當前ftp目錄文件已經遍歷完畢返回上一層目錄
self.conn.cwd("..")
return
else:
print'ERROR:Thedir:%sisnotexist'%ftp_path
return
defput_dir(self,local_path,ftp_path='.',begin=True):
ftp_path=ftp_path.rstrip('/')
#當本地目錄存在時上傳
ifos.path.isdir(local_path):
#上傳初始化:如果給定的ftp路徑不存在需要創建,同時將本地的目錄存放在給定的ftp目錄下。
#本地目錄下文件存放的路徑為ftp_path=ftp_path+os.path.basename(local_path)
#例如:將本地文件夾a上傳到ftp的a/b目錄下,則本地a目錄下的文件將上傳的ftp的a/b/a目錄下
ifbegin:
ifnotself._is_ftp_dir(ftp_path):
self.conn.mkd(ftp_path)
ftp_path=os.path.join(ftp_path,os.path.basename(local_path))
#如果ftp路徑不是目錄,則創建目錄
ifnotself._is_ftp_dir(ftp_path):
self.conn.mkd(ftp_path)
#進入本地目錄,開始遞歸查詢
os.chdir(local_path)
local_files=os.listdir('.')
forfileinlocal_files:
#如果file本地路徑是目錄則遞歸上傳目錄(不需要再進行初始化begin的標志修改為False)
#如果file本地路徑是文件則直接上傳文件
ifos.path.isdir(file):
ftp_path=os.path.join(ftp_path,file)
self.put_dir(file,ftp_path,False)
else:
self.put_file(file,ftp_path)
#如果當前本地目錄文件已經遍歷完畢返回上一層目錄
os.chdir("..")
else:
print'ERROR:Thedir:%sisnotexist'%local_path
return
if__name__=='__main__':
ftp=FTPSync('192.168.1.110')
ftp.login('test','test')
#上傳文件,不重命名
#ftp.put_file('111.txt','a/b')
#上傳文件,重命名
#ftp.put_file('111.txt','a/112.txt')
#下載文件,不重命名
#ftp.get_file('/a/111.txt',r'D:\')
#下載文件,重命名
#ftp.get_file('/a/111.txt',r'D:112.txt')
#下載到已經存在的文件夾
#ftp.get_dir('a/b/c',r'D:\a')
#下載到不存在的文件夾
#ftp.get_dir('a/b/c',r'D:\aa')
#上傳到已經存在的文件夾
ftp.put_dir('b','a')
#上傳到不存在的文件夾
ftp.put_dir('b','aa/B/')
希望本文所述對大家的Python程序設計有所幫助。
以下轉自:http://blog.csdn.net/linda1000/article/details/8255771
Python中的ftplib模塊
Python中默認安裝的ftplib模塊定義了FTP類,其中函數有限,可用來實現簡單的ftp客戶端,用於上傳或下載文件
FTP的工作流程及基本操作可參考協議RFC959
ftp登陸連接
from ftplib import FTP #載入ftp模塊
ftp=FTP() #設置變數
ftp.set_debuglevel(2) #打開調試級別2,顯示詳細信息
ftp.connect("IP","port") #連接的ftp sever和埠
ftp.login("user","password")#連接的用戶名,密碼
print ftp.getwelcome() #列印出歡迎信息
ftp.cmd("xxx/xxx") #更改遠程目錄
bufsize=1024 #設置的緩沖區大小
filename="filename.txt" #需要下載的文件
file_handle=open(filename,"wb").write #以寫模式在本地打開文件
ftp.retrbinaly("RETR filename.txt",file_handle,bufsize) #接收伺服器上文件並寫入本地文件
ftp.set_debuglevel(0) #關閉調試模式
ftp.quit #退出ftp
ftp相關命令操作
ftp.cwd(pathname) #設置FTP當前操作的路徑
ftp.dir() #顯示目錄下文件信息
ftp.nlst() #獲取目錄下的文件
ftp.mkd(pathname) #新建遠程目錄
ftp.pwd() #返回當前所在位置
ftp.rmd(dirname) #刪除遠程目錄
ftp.delete(filename) #刪除遠程文件
ftp.rename(fromname, toname)#將fromname修改名稱為toname。
ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #上傳目標文件
ftp.retrbinary("RETR filename.txt",file_handel,bufsize)#下載FTP文件
網上找到一個具體的例子:
#例:FTP編程
fromftplibimportFTP
ftp=FTP()
timeout=30
port=21
ftp.connect('192.168.1.188',port,timeout)#連接FTP伺服器
ftp.login('UserName','888888')#登錄
printftp.getwelcome()#獲得歡迎信息
ftp.cwd('file/test')#設置FTP路徑
list=ftp.nlst()#獲得目錄列表
fornameinlist:
print(name)#列印文件名字
path='d:/data/'+name#文件保存路徑
f=open(path,'wb')#打開要保存文件
filename='RETR'+name#保存FTP文件
ftp.retrbinary(filename,f.write)#保存FTP上的文件
ftp.delete(name)#刪除FTP文件
ftp.storbinary('STOR'+filename,open(path,'rb'))#上傳FTP文件
ftp.quit()#退出FTP伺服器
完整的模板:
#!/usr/bin/python
#-*-coding:utf-8-*-
importftplib
importos
importsocket
HOST='ftp.mozilla.org'
DIRN='pub/mozilla.org/webtools'
FILE='bugzilla-3.6.7.tar.gz'
defmain():
try:
f=ftplib.FTP(HOST)
except(socket.error,socket.gaierror):
print'ERROR:cannotreach"%s"'%HOST
return
print'***Connectedtohost"%s"'%HOST
try:
f.login()
exceptftplib.error_perm:
print'ERROR:cannotloginanonymously'
f.quit()
return
print'***Loggedinas"anonymously"'
try:
f.cwd(DIRN)
exceptftplib.error_perm:
print'ERRORLcannotCDto"%s"'%DIRN
f.quit()
return
print'***Changedto"%s"folder'%DIRN
try:
#傳一個回調函數給retrbinary()它在每接收一個二進制數據時都會被調用
f.retrbinary('RETR%s'%FILE,open(FILE,'wb').write)
exceptftplib.error_perm:
print'ERROR:cannotreadfile"%s"'%FILE
os.unlink(FILE)
else:
print'***Downloaded"%s"toCWD'%FILE
f.quit()
return
if__name__=='__main__':
main()
❺ shell腳本中取ftp遠程伺服器文件的問題
ftp使用mget下載多個文件默認有提示,可以增加-i參數,表示不提示:
ftp-i-n<<!
...
一般如果在Windows下編輯的文件,傳到linux環境下,文件內容里會因為回車換行表示方式不一樣,會出現^M符號,可以在傳到linux環境後,可以使用dos2unix等工具轉換(該工具因linux版本不同可能並未默認安裝)。另外,要注意所傳文件是否是二進制還是一般文本文件,如果是二進制文件,最好在get前執行bin命令表示傳輸二進制文件。
❻ 上傳文件到遠程ftp的bat程序
rem -----------腳本開始---------------
@echo off
set ftpfile=putfiles.ftp
set logfile=putfiles.log
set mydate=%date:~4,4%%date:~9,2%%date:~12,2%%time:~0,2%%time:~3,2%
echo open 192.168.0.1(遠程ftp地址) > "%ftpfile%"
rem 把下面行中的 username和password改為你的用戶名和密碼
echo user username password >> "%ftpfile%"
rem ------------------------------
echo bin >> "%ftpfile%"
rem 進入FTP server 中的"當前時間"目錄
echo mkdir %mydate% >> "%ftpfile%"
echo cd %mydate% >> "%ftpfile%"
rem ------------------------------
rem 進入本地C盤根目錄
echo lcd c:\ >> "%ftpfile%"
rem ------------------------------
echo put 1.TXT >> "%ftpfile%"
echo quit >> "%ftpfile%"
echo -------------------------------- >> "%logfile%"
date /t >> "%logfile%"
time /t >> "%logfile%"
echo -------------------------------- >> "%logfile%"
ftp -n < "%ftpfile%" >> "%logfile%"
del "%ftpfile%"
@echo on
rem -----------腳本結束---------------
此腳本在WIN SP3(本地),Ser-U(遠程) 測試通過
❼ 編譯一個shell腳本,ftp到主機 新建目錄 拷貝文件 刪除目錄 退出
首先,腳本並不需要知道本身所在主機的IP,所以,用不到10.10.141.91這個源地址。
再次,ftp命令中不支持直接在伺服器端新建文件,只能先在本地新建後上傳。其實,ftp客戶端軟體,如CuteFTP也都是這么做的,只是你覺察不到。
#!/bin/bash
host="10.10.142.72"
username="xxxx"
#這里寫你的FTP登錄用戶名
password="xxxxxxx"
#這里寫你的FTP登錄密碼
file1="testexam1"
file2="testexam2"
touch
$file1
touch
$file2
(
ftp
-ni
$host
<<EOF
quote
USER
$username
quote
PASS
$password
cd
/home/query
#切換伺服器目錄
binary
put
$file1
put
$file2
lcd
/home/query
#切換本地目錄
get
$file1
delete
$file1
bye
EOF
)
>/dev/null
2>err.log
❽ 求幫忙寫個python的FTP小腳本或者批處理,復制文件到多個文件夾
有幾個辦法
1.如果是linux,用scp,最簡單。
2.如果是windows,用共享文件夾最簡單,共享完後,復制就可以
3.在目標伺服器上弄一個服務,可以是FTP也可以是自己定義的socketserver。自己做服務端,也做客戶端。這樣許可權比較大。
4.在目錄伺服器上安裝一個標準的ftp伺服器。然後客戶端用python,使用ftplib
具體的用法。你自己去試驗。不會花多少時間。1個小時就弄好了。
先是使用ftp的CD命令到指定的目錄。然後是使用PUT命令上傳文件。
不過如果是方法4,而a,b,c又不是在同一個父目錄下,可能會有許可權問題。
❾ FTP腳本怎麼設置啊
代碼發給你了:
#!/usr/bin/perl
-w
use
Net::FTP;
use
POSIX
qw(strftime);
#這個是我當時用來抓時間的可以省略
my
$remotefile;
my
$localfile;
my
$dir
=
'E:/CDR/trunk/';
#本地存放路徑
my
$host;
my
$password;
my
$ftp;
#1.
get
begin
$host='192.168.1.105';
#被FTP的遠程IP
$password='hahahaha';
#ftp的密碼
$ftp=Net::FTP->new($host)
or
die
"cannot
connect
to
ftp
server
$host!\n";
$ftp->login("root",$password);
$ftp->cwd("/AP/CDR");
#遠程抓取的路徑
if
(
-d
"$dir/$host"
)
{
#這個條件句是用來判斷本地目錄192.168.1.105是否存在,不存在就創建
}
else
{
system
"mkdir
-p
$host";
}
print
"the
list
of
/ap/cdr
from
$host!!\n";
#列出遠程目錄的所以非目錄文件,並抓取符合條件的文件
&list("/");
$ftp->quit;
#1.
get
end
sub
list()
#list類,判斷文件類型的核心
{
my
$current
=
$_[0];
my
@subdirs;
$ftp->cwd($current);
my
@allfiles
=
$ftp->ls();
foreach
(@allfiles){
if(&find_type($_)
eq
"d"){
#如果是目錄則列印並忽略掉
print
"this
floder!!\n";
}
else{
my
$tmp
=
"$_";
print
$tmp."\n";
if($tmp=~/adf/){
#判斷包含adf則抓取,當然可以擴展正則方法
$remotefile=$tmp;
$localfile
=
"$dir/$host/".$remotefile;
$ftp->binary();
$ftp->get($remotefile,$localfile)
or
die
"Could
not
get
remotefile:$remotefile\n";
print
"download
$remotefile
complete
from
$host!!\n";
}
}
}
}
sub
find_type{
my
$path
=
shift;
my
$pwd
=
$ftp->pwd;
my
$type
=
'-';
if
($ftp->cwd($path))
{
$ftp->cwd
($pwd);
$type
=
'd';
}
return
$type;
}
❿ FTP 復制文件命令
FTP 復制文件命令是get 文件名
1) 說明:顯示ftp命令的說明。後面可以加參數,是加需要解釋的命令名,不加則顯示包含所有命令列表。
2)說明:功能是在本地計算機上運行指定命令。
如! command 其中command就是你要運行的命令,如果不加command這個參數的話,則顯示本地命令提示, 這時你輸入exit命令就能返回到ftp了。
3)$ macro-ame[args]
說明:執行宏定義macro-name。
4) append
說明:使用當前文件類型設置,將本地文件附加到遠程計算機中。大概格式是append local-file [remote-file] 其中local-file是說指定要添加的本地文件。remote-file是說指定要將local-file附加到遠程計算機文件,要是省了這個,則是使用本地文件名做遠程文件名。