总结 - 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

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容

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