我们登陆远程服务器后,常常需要下载、或者上传一些文件,我们常用的 lrzsz 对 tmux 支持不够友好,于是就有了 trzsz 这个新工具,它安装简单,使用方便,功能全面,小巧灵活,居家必备。
GitHub项目地址: https://github.com/trzsz/trzsz
为什么需要 trzs 这个“轮子”?
考虑 laptop -> hostA -> hostB -> docker -> tmux 这种场景,使用 scp 或 sftp 是不方便的。
在这种场景下,使用 lrzsz ( rz / sz ) 是很方便的,但是很可惜它与 tmux 不兼容。 tmux 不愿意支持 rz / sz ( 906, 1439 ),而重新造一个工具比修改 tmux 简单很多。
trzsz 安装指南
在远程服务器上安装
- 用 Python3 安装
	
sudo python3 -m pip install --upgrade trzsz - 用 Python2 安装
	
sudo python2 -m pip install --upgrade trzsz - 用 Homebrew 安装
	
brew update brew install trzsz - 用 Node.js 安装
	
sudo npm install -g trzsz - 
	
或者安装用 Go 写的 trzsz
 
  没有 sudo 权限也可以安装,只要将安装路径 ( 可能是 ~/.local/bin ) 添加到 PATH 环境变量中即可。
支持的终端
- 
	
iTerm2 – 参考 Trzsz-iTerm2 安装文档。
 - 
	
tabby – 安装 tabby-trzsz 插件即可。
 - 
	
electerm – 升级到
1.19.0以上的版本即可。 - 
	
trzsz-go – 只要是支持本地 shell 的终端就可以用。
 - 
	
trzsz.js – 让运行在浏览器中的 webshell 和用 electron 开发的终端支持
trzsz。 
  如果你的终端也支持 trzsz,请告诉我,我很乐意将它加到此列表中。
trzsz 使用指南
trz 上传文件
trz 命令可以不带任何参数,将上传文件到当前目录。也可以带一个目录参数,指定上传到哪个目录。
trz /tmp/
tsz 下载文件
tsz 可以带一个或多个文件名(可使用相对路径或绝对路径,也可使用通配符),将下载指定的文件。
tsz file1 file2 file3
-q 静默模式
trz -q 或 tsz -q xxx ( 加上 -q 选项 ),则在传输文件时不显示进度条。
-y 覆盖模式
trz -y 或 tsz -y xxx ( 加上 -y 选项 ),如果存在相同文件名的文件就直接覆盖。
-b 二进制模式
trz -b 或 tsz -b xxx ( 加上 -b 选项 ),二进制传输模式,对于压缩包、图片、影音等较快。
-e 转义控制字符
二进制模式时,控制字符可能会导致失败,trz -eb 或 tsz -eb xxx ( 加上 -e 选项 ) 转义所有已知的控制字符。
-d 传输文件夹
trz -d 或 tsz -d xxx ( 加上 -d 选项 ),则可以上传或下载指定文件夹和文件。
-B 缓冲区上限
trz -B 20m 或 tsz -B 2M xxx 等,设置最大缓冲区上限 ( 默认 10M )。会自动根据网速选择合适的缓冲区大小,但不会超过此上限。
-t 超时时间
trz -t 30 或 tsz -t 30 xxx 等,设置超时秒数 ( 默认 20 秒 )。在超时时间内,如果无法传完一个缓冲区大小的数据则会报错并退出。设置为 0 或负数,则永不超时。
异常处理方法
- 如果 
tmux不是运行在远程服务器上,而是运行在本地电脑上,或者运行在中间的跳板机上。- 方案1:使用 
tmux -CC与 iTerm2 集成,请参考 iTerm2 与 tmux -CC 集成。 - 方案2:在本地电脑上安装 trzsz-go,设置 
alias ssh="trzsz ssh"可以方便使用。 
 - 方案1:使用 
 - 如果出现了错误,且 
trzsz挂住不能动了:- 按组合键 
control + c可以停止服务器上的trz或tsz进程。 - 对于 iTerm2 用户,按组合键 
command + option + shift + r可以停止 iTerm2 Coprocesses。 
 - 按组合键 
 - 如果 
trz -b二进制上传失败,并且登录远程服务器时使用了telnet或docker exec:- 可以试试转义所有控制字符,例如 
trz -eb。 
 - 可以试试转义所有控制字符,例如 
 - 如果 
trz -b二进制上传失败,并且远程服务器使用 Python3 ( 版本小于 3.7 ):- Python3 ( 版本小于 3.7 ) 支持 base64 模式,不使用 
-b选项即可,使用trz代替。 - 如果想用 
trz -b二进制上传,则需要升级 Python3 到 3.7 以上的版本,或者使用 Python2。 
 - Python3 ( 版本小于 3.7 ) 支持 base64 模式,不使用 
 - 如果 
trz -b或tsz -b二进制传输失败,并且登录远程服务器时使用了expect:- 可以试试在 
expect脚本前设置环境变量export LC_CTYPE=C,例如:#!/bin/sh export LC_CTYPE=C expect -c ' spawn ssh xxx expect "xxx: " send "xxx\n" interact ' 
 - 可以试试在 
 
