linux、windows系统间传输文件
日常工作中经常涉及到系统间的文件传输,下面就简单说一下常用的方法
linux——windows
工具:winscp、SecureCRT、Zmodem(sz, rz)
linux——linux
工具:scp、rsync (具体用法,参照man手册)
通用方法:Python快捷搭建http服务器
一、直接使用python的SimpleHTTPServer 模块搭建http下载服务器(只能下载不能上传)
python -m SimpleHTTPServer 8000
#将当前目录作为http下载服务器的根目录,可以使用wget 命令直接下载文件,如果wget 的uri为空,返回http服务器启动所在目录中文件
eg: wget 127.0.0.1:8000/sample.txt #下载sample.txt文件
eg : wget 127.0.0.1:8000 #列出目录内容
二、利用Python开发http简单的文件服务器(支持上传、下载)
#!/usr/bin/python import re import sys import urllib import httplib2 import os from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer class Webhandler(BaseHTTPRequestHandler): #客户端Get请求的处理函数 def do_GET(self): path, args = urllib.splitquery(self.path) self.send_response(200) self.send_header('Content-type', 'application/octet-stream') self.end_headers() #将当前目录与uri拼接获取文件(夹)的绝对路径 target_file = os.getcwd() + path if os.path.exists(target_file) == False: self.wfile.write(target_file + 'isn\' exists') elif os.path.isdir(target_file): #如果是个文件夹,就直接递归列出文件夹的详细内容 file_list = os.popen("ls -lR").read() self.wfile.write(file_list) elif os.path.isfile(target_file): #如果是个文件,就打开文件然后将文件内容发送给客户端 f = open(target_file, 'rb') self.wfile.write(f.read()) f.close() #客户端POST请求的处理函数 def do_POST(self): path, args = urllib.splitquery(self.path) filename = os.path.basename(path) self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() #读取post请求的body,如果不为空就按照uri最后的名称作为文件名 #将body写入到文件并保存到当前文件夹 datas = self.rfile.read(int(self.headers['content-length'])) if datas != None: f = open(filename, 'wb') f.write(datas) f.close() if __name__ == '__main__': try: port = int(sys.argv[1]) print 'port is %d' % port server = HTTPServer(('', port), Webhandler) print 'Welcome to my website !' server.serve_forever() except KeyboardInterrupt: print '^C received, shutting down server' server.socket.close()
注:1. 上述这段Python代码只是简单实现了文件上传、下载功能,需要的话可以添加自己的处理逻辑。
将上述代码保存到一个文本文件file_server.py中,然后把该文件拷贝到保存文件的目录下,执行 python ./file_server.py 8000,启动监听8000端口的http服务器
如果执行的时候提示缺少相应的模块可以通过pip的方式安装:
- sudo yum install python-setuptools -y; easy_install pip 安装python包管理器pip
- 创建文件 ~/.pip/pip.conf,然后添加如下内容(将pip镜像源改成国内的,加快速度)
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple
三. 使用方法
客户端可以通过如下命令进行下载上传操作:
#下载文件 wget 127.0.0.1:8000/note.txt #下载http服务器上的note.txt文件 #上传文件: curl --data-binary @note.txt 127.0.0.1:8000/note1.txt #将本地的note.txt文件上传到http服务器上并重命名为note1.txt
欢迎技术探讨:sxhlinux@163.com