trzsz 是一个兼容 tmux 的文件传输工具,和 lrzsz ( rz / sz ) 类似,并且有进度条和支持目录传输。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Lonny Wong cf44083394
update doc
2 months ago
screen-shot 支持传输目录 2 months ago
LICENSE.md trzsz 中文指引 8 months ago
README.md update doc 2 months ago
iterm2.md update doc 2 months ago
tmuxcc.md 1.0 正式版 5 months ago

README.md

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

trzsz

trzsz ( trz / tsz ) 是一个兼容 tmux 的文件传输工具,和 lrzsz ( rz / sz ) 类似,并且有进度条和支持目录传输。

GitHub: https://github.com/trzsz/trzsz

MIT License PyPI trzsz 中文网站

为什么?

考虑 laptop -> hostA -> hostB -> docker -> tmux 这种场景,使用 scpsftp 是不方便的。

在这种场景下,使用 lrzsz ( rz / sz ) 是很方便的,但是很可惜它与 tmux 不兼容。

tmux 不愿意支持 rz / sz ( 906, 1439 ),而重新造一个工具比修改 tmux 简单很多。

安装指南

在远程服务器上安装

  • 用 Python3 安装

    sudo python3 -m pip install --upgrade trzsz
    
  • 用 Python2 安装

    sudo python2 -m pip install --upgrade trzsz
    
  • 用 Homebrew 安装

    brew update
    brew install trzsz
    

  没有 sudo 权限也可以安装,只要将安装路径 ( 可能是 ~/.local/bin ) 添加到 PATH 环境变量中即可。

支持的终端

  如果你的终端也支持 trzsz,请告诉我,我很乐意将它加到此列表中。

使用指南

trz 上传文件

trz 命令可以不带任何参数,将上传文件到当前目录。也可以带一个目录参数,指定上传到哪个目录。

trz /tmp/

tsz 下载文件

tsz 可以带一个或多个文件名(可使用相对路径或绝对路径,也可使用通配符),将下载指定的文件。

tsz file1 file2 file3

-q 静默模式

trz -qtsz -q xxx ( 加上 -q 选项 ),则在传输文件时不显示进度条。

-y 覆盖模式

trz -ytsz -y xxx ( 加上 -y 选项 ),如果存在相同文件名的文件就直接覆盖。

-b 二进制模式

trz -btsz -b xxx ( 加上 -b 选项 ),二进制传输模式,对于压缩包、图片、影音等较快。

-e 转义控制字符

二进制模式时,控制字符可能会导致失败,trz -ebtsz -eb xxx ( 加上 -e 选项 ) 转义所有已知的控制字符。

-d 传输文件夹

trz -dtsz -d xxx ( 加上 -d 选项 ),则可以上传或下载指定文件夹和文件。

-B 缓冲区上限

trz -B 20mtsz -B 2M xxx 等,设置最大缓冲区上限 ( 默认 10M )。会自动根据网速选择合适的缓冲区大小,但不会超过此上限。

-t 超时时间

trz -t 30tsz -t 30 xxx 等,设置超时秒数 ( 默认 10 秒 )。在超时时间内,如果无法传完一个缓冲区大小的数据则会报错并退出。设置为 0 或负数,则永不超时。

异常处理方法

  • 如果 tmux 不是运行在远程服务器上,而是运行在本地电脑上,或者运行在中间的跳板机上。

    • 方案1使用 tmux -CC 与 iTerm2 集成,请参考 iTerm2 与 tmux -CC 集成
    • 方案2在本地电脑上安装 trzsz-go,设置 alias ssh="trzsz ssh" 可以方便使用。
  • 如果出现了错误,且 trzsz 挂住不能动了:

    • 按组合键 control + c 可以停止服务器上的 trztsz 进程。
    • 对于 iTerm2 用户,按组合键 command + option + shift + r 可以停止 iTerm2 Coprocesses
  • 如果 trz -b 二进制上传失败,并且登录远程服务器时使用了 telnetdocker exec

    • 可以试试转义所有控制字符,例如 trz -eb
  • 如果 trz -b 二进制上传失败,并且远程服务器使用 Python3 ( 版本小于 3.7 )

    • Python3 ( 版本小于 3.7 ) 支持 base64 模式,不使用 -b 选项即可,使用 trz 代替。
    • 如果想用 trz -b 二进制上传,则需要升级 Python3 到 3.7 以上的版本,或者使用 Python2。
  • 如果 trz -btsz -b 二进制传输失败,并且登录远程服务器时使用了 expect

    • 可以试试在 expect 脚本前设置环境变量 export LC_CTYPE=C,例如:
      #!/bin/sh
      export LC_CTYPE=C
      expect -c '
        spawn ssh xxx
        expect "xxx: "
        send "xxx\n"
        interact
      '
      

屏幕截图

trzsz 在 iTerm2 中 text 进度条示例

using trzsz in iTerm2 with text progress bar

trzsz 在 iTerm2 中 zenity 进度条示例

using trzsz in iTerm2 with zenity progress bar

trzsz 在 tabby 中 tabby-trzsz 插件示例

using trzsz in tabby with tabby-trzsz plugin

联系方式

有什么问题可以发邮件给我 lonnywong@qq.com,也可以直接提 Issues