总结 - Mac 环境里 FTP 操作小结

toilet

近几日在协调一个类似商品微店的项目,客户需求还没来得及了解,项目的前端与后端分别是两个开发组并行推进,现在前后端工作进入尾期需要合并测试,而我在其中扮演中间人的角色。

Mac 环境信息

这篇笔记算是在 Mac 环境里基于 FTP 协议操作本地、服务器文件系统的一套完整解决方案,整理下来以备日后再用。

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。

TCP/IP 协议中,FTP 标准命令 TCP端口号为 21,Port方式数据端口为 20。

FTP的任务是从一台计算机将文件传送到另一台计算机,不受操作系统的限制

初阶: Finder 查看/下载

Mac 环境中的文件系统原生支持连接 FTP 服务器查看文件目录,但功能十分有限,仅支持查看下载 FTP 服务器中的文件[夹]不支持上传、编辑、删除文件[夹],满足了查阅目录结构、文件配置等最基本的需求。

Finder 连接 FTP 服务器,步骤一
Finder 连接 FTP 服务器,步骤二

要把前端同事的网页批量上传至 FTP 服务器,这时就可以使用 FTP 命令行劳心了。

进阶:FTP 命令

1. 登录

命令行中最简单的两种登录方式,首次登录使用方式一比较简单,连接超时可以再使用方式二重新登录,两种登录方式算是配合或组合关系。

# 方式一
$ ftp server-ip

# 方式二
$ ftp
ftp> open server-ip

实例登录场景效果:

$ ftp 139.196.161.141
Connected to 139.196.161.141.
220-FileZilla Server 0.9.53 beta
220-written by Tim Kosse (tim.kosse@filezilla-project.org)
220 Please visit https://filezilla-project.org/
Name (139.196.161.141:lijunjie): username
331 Password required for username
Password:
230 Logged on
Remote system type is UNIX.
ftp> 
// wait a long time
ftp> ls
421 Connection timed out.
ftp> open 139.196.161.141
Connected to 139.196.161.141.
220-FileZilla Server 0.9.53 beta
220-written by Tim Kosse (tim.kosse@filezilla-project.org)
220 Please visit https://filezilla-project.org/
Name (139.196.161.141:lijunjie): username
331 Password required for username
Password:
230 Logged on
Remote system type is UNIX.
ftp>

登录成功后,就会进入 FTP 命令行环境,此时如何分辨本地与服务器的目录呢?此时的视角犹如四游记中一直在天空中隐身保护唐僧的五方揭谛四值功曹,上观天堂神仙欢乐事、下览人间凡体苦难状;此时不能说查看目录,而应该说查看本地目录或服务器目录,与文件系统相关的命令操作都分本地与服务器两套。

服务器操作 本地目录操作
cd 目录名(进入服务器目录) lcd 目录名(进入本机目录)
cd \(退到服务器根目录) lcd \(退到本机根目录)
cd ..(退回到上一级目录) lcd ..(退回到上一级目录)
pwd !pwd
ls !ls

**2. 上传文件[夹] **

上传本地文件至服务器指定目录中,必须显式指定上传至服务器后文件名称

# server-filename 必须显式指明,否则报错:文件名无效
ftp> put /local/path/filename /remote/path/server-filename

ftp> cd /views
250 CWD successful. "/views" is current directory.
ftp> put /local/path/report_161226.cshtml report2.cshtml
local: /local/path/report_161226.cshtml remote: report2.cshtml
229 Entering Extended Passive Mode (|||56835|)

150 Opening data channel for file upload to server of “/views/report2.cshtml"
100% |*| 10865        2.87 MiB/s    --:-- ETA

226 Successfully transferred “/views/report2.cshtml"
10865 bytes sent in 00:00 (85.37 KiB/s)

使用通匹符批量上传文件至服务器,需要注意的一点,mput 不支持懒操作即使用绝对路径,应该先进入要上传的本地文件夹及远程文件夹才可以操作,确实这样显得上传操作异常简洁。

ftp> cd /remote/path
ftp> lcd /local/path
ftp> mput goods*
local: goods.cshtml remote: goods.cshtml
229 Entering Extended Passive Mode (|||62331|)

150 Opening data channel for file upload to server of "/local/path/goods.cshtml"
100% |*|   519        1.80 MiB/s    --:-- ETA

226 Successfully transferred "/local/path/goods.cshtml"
519 bytes sent in 00:00 (9.54 KiB/s)

关于上传文件夹, FTP 命令不支持文件夹上传操作

3. 下载文件[夹]

下载服务器中的文件至本地目录中,可选指定下载至本地目录后的文件名称,依然要求提前进入待下载文件的目录中

# 方式一
ftp> get remote-filename
# 方式二
ftp> get remote-filename local-filename
ftp> get Web.config
local: Web.config remote: Web.config
229 Entering Extended Passive Mode (|||58735|)
150 Opening data channel for file download from server of "/Web.config"
100% |*|  1300        2.28 MiB/s    00:00 ETA
226 Successfully transferred "/Web.config"
1300 bytes received in 00:00 (142.33 KiB/s)
ftp> get Web.config hello.config
local: hello.config remote: Web.config
229 Entering Extended Passive Mode (|||53446|)
150 Opening data channel for file download from server of "/Web.config"

100% |*|  1300        2.55 MiB/s    00:00 ETA

226 Successfully transferred "/Web.config"
1300 bytes received in 00:00 (143.20 KiB/s)

使用通匹符批量下载服务器中的文件至本地目录。

ftp> cd /remote/path
ftp> mget filename*

关于下载文件夹, FTP 命令不支持文件夹下载操作

4. 删除文件[夹]

在服务器中删除文件,可以指定绝对路径,相对其他命令显得比较灵活。

ftp> delete /remote/path/category.cshtml
250 File deleted successfully
ftp> mdelete *_order*
mdelete goods_order.cshtml [anpqy?]? a
Prompting off for duration of mdelete.
250 File deleted successfully
250 File deleted successfully
250 File deleted successfully
250 File deleted successfully
250 File deleted successfully
250 File deleted successfully
250 File deleted successfully

关于删除文件夹, FTP 命令不支持文件夹删除操作

5. 移动文件

FTP 命令不支持移动文件,只能通过删除再上传文件变相的实现移动文件。

6. 增删改查

操作 单文件 批量操作(multi)
put mput
delete mdelete
不支持 不支持
get mget

7. FileZilla 工具

涉及到服务器端文件夹的修改、删除等操作时,就需要安装一下 FileZilla 工具;使用 FTP 命令登录后的提示内容中可以看到 FileZilla 字样。

FileZilla 工具界面很简单,全程使用鼠标拖拖拉拉即可完成操作。

高阶:脚本操作

其实没有很复杂的场景,把前端的静态资源使用 FileZilla 工具一次性上传至服务器,按照后端同事的要求把不同功能需求的网页上传至服务器不同目录下,这种批量重复性的无聊操作最佳解决方案就是写入脚本,省时、准确、周全,后续前端同事调整网页内容时,调用一下脚本即可。

$ cat commands.txt
open remote-server-ip 
user user-name user-password
binary /*以二进制传送*/ 
hash   /*当有数据传送时,显示#号*/ 

cd /remote/path1
lcd /local/path2
mput file1.*

cd /remote/path2
!cd /local/path2
mput file2.*

bye   /*退出*/ 
$ cat commands.txt | ftp -n

不喜欢 bash 脚本中的 EOF 用法,感觉代码思路不够清晰,但需要使用变量时,就不得不使用这种写法了。

$ commands.sh
#!/usr/bin/env bash

timestamp=$(date "+%Y%m%d")
# mkdir -p ${timestamp} && touch ${timestamp}/hello.txt

cat <<EOF | ftp -n
open 139.196.161.141
user junjie junjie
binary
hash

!ls ${timestamp}/

bye
EOF

sed 批量修改文件

后端同事部署的测试环境中,前端同事的页面对静态资源的引用需要调整一下,有章可循,也就是一条 sed 命令回车间可以解决的。

# 方式一:无备份
$ sed -i '' 's/wait-replace/to-replace/g' filename
# 方式二:备份
$ sed -i '.bak' 's/wait-replace/to-replace/g' filename
$ cat filename // 确认修改无误
$ rm *.bak     // 删除备份

# ./resource 替换为 /mobile/resource
$ sed -i '.bak' 's/\.\/resource/\/mobile\/resource/g' project/*.html
$ rm project/*.html.bak

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、第八章 Samba服务器2、第八章 NFS服务器3、第十章 Linux下DNS服务器配站点,域名解析概念命令:...
    哈熝少主阅读 9,215评论 0 10
  • FTP服务概述 简单FTP构建及访问 VSFTP服务基础 用户禁锢、黑白名单 FTP并发及带宽限制 一、FTP服务...
    紫_轩阅读 12,384评论 3 25
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,281评论 19 139
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 100,279评论 9 468
  • 图片更清晰,文字在最下面 FTP是TCP/IP的一种应用,使用TCP而不是UDP,所以是可靠的,面向连接的。 FT...
    停下浮躁的心阅读 5,717评论 0 4

友情链接更多精彩内容