macOS iTerm2+rz/sz 上传文件到服务器(比 rsync 和 scp 方便)

347 天前
 xiebruce

之前一直用 rsync 和 scp 上传 /下载文件,每次都要写登录用户名、ip 及路径,比较麻烦,昨天研究了一下 rz/sz ,结合 iTerm2 ,参考别人的脚本写了两个脚本。

地址: https://github.com/xiebruce/iterm2-zmodem

2409 次点击
所在节点    程序员
22 条回复
makelove
347 天前
macOS 有没有~/.ssh/config 这个机制吗,可以给你的 ssh 主机起别名,别名代表用户名 /ip 组合,还可以叠加别的设置比如代理
xiebruce
347 天前
@makelove 有,我也弄过,不过现在没在用,你不说我都忘了有这功能了,主要是我平时登录直接在 iTerm2 里选择,并不手写,所以只是登录的情况下就用不到这功能,但传文件是必须写,不过就算用别名也麻烦,rz/sz 两个字母就搞定
Volekingsg
347 天前
看了下 https://www.xiebruce.top/1863.html ,rz 还要选文件,sz 也需要输入路径,而且也不适用本地传文件到服务器,或者服务器传文件到别的服务器,没太看出来咋方便了。
Nazz
347 天前
ssh-copy-id 就不需要密码了
xiebruce
347 天前
@Nazz 這個我有做,用公鑰登錄嘛,可是麻煩的又不是輸入密碼,而是要敲命令,敲路徑或拖路徑,等等
xiebruce
347 天前
@Volekingsg rz 是要選路徑但不用敲路徑,只需鼠標點點就可以了,不用敲 scp/rsync+選項+服務器 user@ip ,就算設置了別名服務器多也要想想是哪個名稱

sz 實際敲文件名就行,因為我都是在要傳輸的文件當前文件夾下,只需要 rz 再敲文件前兩三個字母再按 tab 補全就行,而且不用任何選項,總之實際體驗比 rsync/scp 方便很多,我之前用的就是 rsync/scp ,對比起來還是很明顯的,明天我還要加個拖放上傳,直接把文件往終端(已登錄服務器的窗口)一拖就上傳了
hauzerlee
346 天前
键盘党和鼠标党的习惯区别吧。。。我习惯键盘,任何需要用鼠标(触摸板也一样)的操作都觉得不靠谱,容易点错,还费眼。敲命令可以盲打。不管怎么说,自己动手写点东西改进使用环境,都该支持一下。
achina0731
346 天前
croc 了解一下
likeme
346 天前
感觉 secureFX 更方便,command+V 就上传了。。。
xslong
346 天前
服务器上的 .ssh/authorized_keys 加上自己电脑的公钥就不用输密码啦,常用的服务器取个别名设置 hosts ,上传、下载文件用 scp 效率很高。
shimada666
346 天前
lrzsz 没有 iterm2 体验不咋滴,我选择带进度条的 trzsz
xiebruce
346 天前
@achina0731 croc 看上去不错
xiebruce
346 天前
@shimada666 之前不知道 trzsz ,我也是配置完才发现有 trzsz 可以用🤣
xiebruce
346 天前
@likeme 应用场景不一样,比如我正在终端上操作服务器,刚好遇到要上传一个文件到当前文件夹,于是我就在操作服务器的终端界面上输入 rz ,按回车,它就会弹窗让我选择要上传什么文件,我选择文件后就上传了。

而如果用 secureFX ,我还得切到另一个软件(即 secureFX),甚至我根本就还没打开 secureFX ,我还得先打开,然后连接上这服务器,然后一级一级找到对应目录,再来上传,这个过程的复杂度明显高很多。

而且 secureFX 收费软件,而且我觉得那种界面太花哨,对我来说是一个没必要的软件,这种基于 sftp 的软件其实很多,不止 secureFX ,比如:Transmit 。

主要是,我并不是专门传文件,而是在操作服务器的过程中偶尔要上传文件,既然我可以直接在当前终端上上传,就没必要再开一个软件,连接服务器,一级一级找到对应的目录来上传这么麻烦
ruanimal
346 天前
rzsz 一般是用在有跳板机的场景
xiangagou
346 天前
如果是做个脚本能自动配置就好了,现在这项目基本就是介绍配置流程,相当于把博客内容搬到 github
xiebruce
346 天前
@xslong 公钥登录一直都有配置,我说的麻烦并不是输入密码,而是整个操作过程啦,如果我用的是 rz/sz ,比如我正在服务器上操作,刚好要上传一个文件,直接输入 rz ,回车,它就会弹窗让我选择,选择文件后就上传了,一气呵成。

但是如果像你说的 scp ,首先,我就要离开当前操作界面(因为当前在服务器),终端新开一个 Tab(或切换到已经打开的本地 Tab),然后 scp /path/to/filename serveralias:/home/username (我试过无法用 ~ 代替,必须写全 /home/username/),当然要传的文件可能刚好在当前文件夹,于是可以敲 scp filename serveralias:/home/username ,并且不用敲全,按 tab 可以补全,可是有时候这服务器不经常登录,serveralias 我可能忘了,我还得想一下(想的出来还好,想不出来还要去找),上传到服务器家目录还好,如果不是要上传到家目录,我还得想一下要传到哪个路径,或者干脆又切回服务器那边 pwd 出个路径再回来粘贴。

比起我直接在当前服务器操作窗口运行一个 rz ,scp 的这一顿操作下来,确实是麻烦很多,而且这只是上传文件。

如果是下载文件,比如我在终端操作服务器,操作到某个位置,刚好想下载其中的一个文件,名为“filename”,那么我只需要:sz fil ,按 tab 补全,回车,OK ,稍等一会儿文件就到了我本机的“下载”目录了,简直超级方便有木有。

而这个下载操作如果换成 scp ,我还得首先切到到另一个本地 Tab ,输入:scp serveralias: (这里还是会出现如果不太记得 alias 的问题),然后等等,我要下载的文件在哪个路径来着,再切回去服务器那边,pwd 一下复制到文件所在目录路径,然后再切回本地终端 Tab ,粘贴一下,等等,只粘贴了文件所在文件夹路径,文件名比较长我记不全,我还要回去再粘贴一次文件名,ok ,现在终于粘贴好了:`scp serveralias:/path/to/folder/filenamexxx .` 终于打完了,回车运行,开始下载。

其中我做了很多假设,现在我就假设你很熟悉 serveralias 和需要下载的文件路径,并且在当时就已经双击复制了要下载的文件名,那你至少还得切到本地终端 Tab ,然后输入 scp serveralias:/path/to/folder/,粘贴文件名,最后回车下载,而我用 sz ,直接在服务器那边 sz fil (假设要下载文件为 filenamexxxx ),按 tab 补全,回车,那也比你这方便很多,况且这是在假设你非常熟悉的记得 serveralias 和要下载的文件在服务器中的 path 的情况下。

你体会一下这种操作,哪个方便?😂 不过缺点就是 rz/sz 不支持传输文件夹,但是有替代的来了,换用 trz/tsz 就可以了,操作完全一样,但是支持文件夹,而且有传输进度条。
xiebruce
346 天前
@ruanimal 没有跳板机也可以用呀,你可以看我回复 @xslong 的那段,主要是它操作起来确实比 scp/rsync 方便的多
xiebruce
346 天前
@xiangagou 自动配置不了的,主要是涉及 iTerm2 那边的触发器,那是软件上的东西,你必须鼠标点击自己添加,我这个项目其实就是两个脚本,这两个脚本是关键,没有这两个脚本就无法工作。
ruanimal
346 天前
而且 op 写代码的时候真的搜索一下吗 https://github.com/aikuyun/iterm2-zmodem

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/941715

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX