V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiebruce
V2EX  ›  程序员

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

  •  
  •   xiebruce ·
    xiebruce · 2023-05-21 17:11:56 +08:00 · 2781 次点击
    这是一个创建于 534 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    • 上传:会弹窗让你选择要上传哪些文件,支持多文件上传;
    • 下载:不弹窗,直接保存到“下载”目录(当然也可设置为弹窗)

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

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

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

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

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

    主要是,我并不是专门传文件,而是在操作服务器的过程中偶尔要上传文件,既然我可以直接在当前终端上上传,就没必要再开一个软件,连接服务器,一级一级找到对应的目录来上传这么麻烦
    ruanimal
        15
    ruanimal  
       2023-05-22 15:46:37 +08:00
    rzsz 一般是用在有跳板机的场景
    xiangagou
        16
    xiangagou  
       2023-05-22 15:59:01 +08:00
    如果是做个脚本能自动配置就好了,现在这项目基本就是介绍配置流程,相当于把博客内容搬到 github
    xiebruce
        17
    xiebruce  
    OP
       2023-05-22 16:01:03 +08:00
    @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
        18
    xiebruce  
    OP
       2023-05-22 16:02:51 +08:00
    @ruanimal 没有跳板机也可以用呀,你可以看我回复 @xslong 的那段,主要是它操作起来确实比 scp/rsync 方便的多
    xiebruce
        19
    xiebruce  
    OP
       2023-05-22 16:08:59 +08:00
    @xiangagou 自动配置不了的,主要是涉及 iTerm2 那边的触发器,那是软件上的东西,你必须鼠标点击自己添加,我这个项目其实就是两个脚本,这两个脚本是关键,没有这两个脚本就无法工作。
    ruanimal
        20
    ruanimal  
       2023-05-22 18:17:14 +08:00
    而且 op 写代码的时候真的搜索一下吗 https://github.com/aikuyun/iterm2-zmodem
    xiebruce
        21
    xiebruce  
    OP
       2023-05-23 12:15:24 +08:00
    @ruanimal 其实我就是参考这个写的,主要原因是他的代码无法上传多个文件,以及文档不清不楚。

    而我目前添加了上传多文件功能以及拖放上传功能,以及非常详细完整的文档,按我文档一定能配置成功。

    写完怕时间一长会丢(硬盘坏啦 /不小心删掉啦 /换电脑没注意弄过来啦等等),于是就上传到 github 备份一下咯,既然都在 github 了,都就分享一下看是否有人需要咯,当然也是作为自己的一个记录,很多东西不记录,时间一长就忘了。
    ruanimal
        22
    ruanimal  
       2023-05-23 14:22:34 +08:00
    @xiebruce good job
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2635 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:32 · PVG 23:32 · LAX 07:32 · JFK 10:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.