前言
lrzsz ( rz / sz ) 是非常方便好用的 Linux 文件传输工具,但是几十年没更新了。
(相关资料图)
trzsz 简介
trzsz ( trz / tsz ) 始于 iTerm2 + tmux 用不了 rz / sz ,使用 Python 开发,兼容 tmux ,有进度条,支持目录传输,支持拖动上传。github: https://github.com/trzsz/trzsz 。为了支持 web 页面使用 trzsz ( trz / tsz ) 上传和下载,以及支持 electron 开发的一系列终端( 如 tabby 、electerm 等 ),开发了 js 版本 https://github.com/trzsz/trzsz.js 。为了支持更多的原生终端使用 trzsz ( trz / tsz ),开发了 go 版本 https://github.com/trzsz/trzsz-go 。trzsz ( trz / tsz ) 相比 lrzsz ( rz / sz ) 的优点
支持 tmux,包括 tmux 普通模式,以及与 iTerm2 集成的 tmux 命令模式。支持 传输目录,trz -d
命令上传目录,tsz -d xxx
命令下载 xxx 目录。支持 Windows,不仅可在 Windows 客户端使用,也可在 Windows ssh 服务器使用。支持 原生终端,不需要原生终端做支持,只要使用 trzsz ssh x.x.x.x
登录即可。支持 web 终端,通过 web 浏览器在本地与服务器之间传输目录和文件。支持 拖动上传,将文件和目录拖到终端窗口即可上传到远程服务器。支持 进度条,显示当前正在传输的文件名、进度、大小、速度和剩余时间等。更好的 交互体验,传输成功或出错时显示友好的结果,ctrl + c
优雅中止。trzsz 录屏演示
安装指南
在远程服务器上安装
用 Python3 安装sudo python3 -m pip install --upgrade trzsz
用 Python2 安装sudo python2 -m pip install --upgrade trzsz
用 Homebrew 安装brew updatebrew install trzsz
用 Node.js 安装sudo npm install -g trzsz
或者安装用 Go 写的 trzsz查看 https://github.com/trzsz/trzsz-go没有 sudo
权限也可以安装,只要将安装路径 ( 可能是 ~/.local/bin
) 添加到 PATH
环境变量中即可。
支持的终端
iTerm2 -- 参考 Trzsz-iTerm2 安装文档。tabby -- 安装 tabby-trzsz 插件即可。electerm -- 升级到1.19.0
以上的版本即可。ttyd -- 升级到 1.7.3
以上的版本,并且启动时加上 -t enableTrzsz=true
,非 localhost 要用 https
。trzsz-go -- 只要是支持本地 shell 的终端就可以用。trzsz.js -- 让运行在浏览器中的 webshell 和用 electron 开发的终端支持 trzsz
。使用指南
trz 上传文件
trz
命令可以不带任何参数,将上传文件到当前目录。也可以带一个目录参数,指定上传到哪个目录。
trz /tmp/
下载文件
tsz
可以带一个或多个文件名(可使用相对路径或绝对路径,也可使用通配符),将下载指定的文件。
tsz file1 file2 file3
静默模式
trz -q
或 tsz -q xxx
( 加上 -q
选项 ),则在传输文件时不显示进度条。
覆盖模式
trz -y
或 tsz -y xxx
( 加上 -y
选项 ),如果存在相同文件名的文件就直接覆盖。
二进制模式
trz -b
或 tsz -b xxx
( 加上 -b
选项 ),二进制传输模式,对于压缩包、图片、影音等较快。
转义控制字符
二进制模式时,控制字符可能会导致失败,trz -eb
或 tsz -eb xxx
( 加上 -e
选项 ) 转义所有已知的控制字符。
传输文件夹
trz -d
或 tsz -d xxx
( 加上 -d
选项 ),则可以上传或下载指定文件夹和文件。
缓冲区上限
trz -B 20m
或 tsz -B 2M xxx
等,设置最大缓冲区上限 ( 默认 10M )。会自动根据网速选择合适的缓冲区大小,但不会超过此上限。
超时时间
trz -t 30
或 tsz -t 30 xxx
等,设置超时秒数 ( 默认 20 秒 )。在超时时间内,如果无法传完一个缓冲区大小的数据则会报错并退出。设置为 0 或负数,则永不超时。
异常处理方法
如果tmux
不是运行在远程服务器上,而是运行在本地电脑上,或者运行在中间的跳板机上。方案1:使用 tmux -CC
与 iTerm2 集成,请参考 iTerm2 与 tmux -CC 集成。方案2:在本地电脑上安装 trzsz-go,设置 alias ssh="trzsz ssh"
可以方便使用。如果出现了错误,且 trzsz
挂住不能动了:按组合键 control + c
可以停止服务器上的 trz
或 tsz
进程。对于 iTerm2 用户,按组合键 command + option + shift + r
可以停止 iTerm2 Coprocesses。如果 trz -b
二进制上传失败,并且登录远程服务器时使用了 telnet
或 docker exec
:可以试试转义所有控制字符,例如 trz -eb
。如果 trz -b
或 tsz -b
二进制传输失败,并且登录远程服务器时使用了 expect
:可以试试在 expect
脚本前设置环境变量 export LC_CTYPE=C
,例如:#!/bin/shexport LC_CTYPE=Cexpect -c " spawn ssh xxx expect "xxx: " send "xxx\n" interact"