Skip to main content

trzsz is a simple file transfer tools, similar to lrzsz ( rz / sz ) but compatible with tmux, which works with iTerm2 and has a nice progress bar.

Project description

trzsz

trzsz is a simple file transfer tools, similar to lrzsz ( rz / sz ) but compatible with tmux.

which works with iTerm2 and has a nice progress bar.

Website: https://trzsz.github.io

MIT License PyPI trzsz 中文网站

Why?

I love to use iTerm2 integrating with tmux to manage terminal sessions.

Sometimes, I need to transfer some files between my laptop and the remote server.

Considering laptop -> hostA -> hostB -> docker -> tmux , using scp to transfer files is inconvenience.

Tmux is not going to support lrzsz ( rz / sz ) ( 906, 1439 ), and I found out that creating a new file transfer tools is much easier than patching tmux.

Additionally, iTerm2-zmodem is not supporting a progress bar. Is there something wrong happened or just need more time?

Requirements

Installation

Server side

Install trzsz-svr

sudo python3 -m pip install --upgrade trzsz-libs trzsz-svr
  • Also supports Python2:
    sudo pip install --upgrade trzsz-libs trzsz-svr
    
  • Can be installed without sudo, but need to add the installation path ( may be ~/.local/bin ) to the PATH environment.
  • trz -v or tsz -v output the version of trzsz means successfully installed. Otherwise, check the output of the previous installation.

Client side

Install trzsz-iterm2

sudo python3 -m pip install --upgrade trzsz-libs trzsz-iterm2
  • Also supports Python2:
    sudo pip install --upgrade trzsz-libs trzsz-iterm2
    
  • which trzsz-iterm2 output /usr/local/bin/trzsz-iterm2 means successfully installed. if not:
    • which trzsz-iterm2 shows nothing, check the output of the previous installation.
    • which trzsz-iterm2 shows another path, create a soft link:
      sudo ln -sv $(which trzsz-iterm2) /usr/local/bin/trzsz-iterm2

Install iTerm2 and create a Trigger as follows.

Name Value Note
Regular Expression :(:TRZSZ:TRANSFER:[SR]:\d+\.\d+\.\d+:\d+) No space at the end
Action Run Silent Coprocess
Parameters /usr/local/bin/trzsz-iterm2 \1 No space at the end
Enabled Checked
  • Don't check the Use interpolated strings for parameters at the bottom.

  • Note that the Trigger should be configured for each Profile in use.

  • iTerm2 Trigger configuration allows input multiple lines, but only shows one line. Make sure don't copy a newline into it.

iTerm2 Trigger configuration

Optional install zenity for a nice progress bar.

brew install ncruces/tap/zenity
  • If Mac M1 install fails, try to install with go:
    brew install go
    go install 'github.com/ncruces/zenity/cmd/zenity@latest'
    sudo cp ~/go/bin/zenity /usr/local/bin/zenity
    
  • which zenity output /usr/local/bin/zenity means successfully installed. if not:
    • which zenity shows nothing, check the output of the previous installation.
    • which zenity shows another path, create a soft link:
      sudo ln -sv $(which zenity) /usr/local/bin/zenity

Manual

trz upload files to remote server

usage: trz [-h] [-v] [-q] [-y] [-b] [-e] [-B N] [-t N] [path]

Receive file(s), similar to rz but compatible with tmux.

positional arguments:
  path               path to save file(s). (default: current directory)

optional arguments:
  -h, --help         show this help message and exit
  -v, --version      show program's version number and exit
  -q, --quiet        quiet (hide progress bar)
  -y, --overwrite    yes, overwrite existing file(s)
  -b, --binary       binary transfer mode, faster for binary files
  -e, --escape       escape all known control characters
  -B N, --bufsize N  buffer chunk size ( 1K <= N <= 100M ). (default: 1M)
  -t N, --timeout N  timeout ( N seconds ) for each buffer chunk.
                     N <= 0 means never timeout. (default: 100)

tsz download files from remote server

usage: tsz [-h] [-v] [-q] [-y] [-b] [-e] [-B N] [-t N] file [file ...]

Send file(s), similar to sz but compatible with tmux.

positional arguments:
  file               file(s) to be sent

optional arguments:
  -h, --help         show this help message and exit
  -v, --version      show program's version number and exit
  -q, --quiet        quiet (hide progress bar)
  -y, --overwrite    yes, overwrite existing file(s)
  -b, --binary       binary transfer mode, faster for binary files
  -e, --escape       escape all known control characters
  -B N, --bufsize N  buffer chunk size ( 1K <= N <= 100M ). (default: 1M)
  -t N, --timeout N  timeout ( N seconds ) for each buffer chunk.
                     N <= 0 means never timeout. (default: 100)

Trouble shooting

  • If tmux is not running on the remote server, but on the local mac, or on a middle server.

    • Since trzsz can't find the tmux process on the server, have to use the tmux -CC control mode.
    • About how to use the tmux -CC control mode, please refer to iTerm2 tmux Integration.
  • If an error occurs, and trzsz is hanging up.

    • Press command + option + shift + r to stop iTerm2 Coprocesses.
    • Press control + c to stop trz or tsz process on the server.
  • If trz -b binary upload fails, and login to server using telnet or docker exec.

    • Try to escape all known control characters, e.g., trz -eb.
  • If trz -b binary upload fails, and the server is using Python3 < 3.7.

    • Python3 < 3.7 supports base64 mode, just don't use trz -b, use trz instead.
    • If you want to use trz -b binary upload, upgrade Python3 to above 3.7, or use Python2.
  • If trz -b or tsz -b binary transfer fails, and login to server using expect.

    • Try to export LC_CTYPE=C before the expect script. e.g.:
      #!/bin/sh
      export LC_CTYPE=C
      expect -c '
        spawn ssh xxx
        expect "xxx: "
        send "xxx\n"
        interact
      '
      

Screenshot

Upload files to remote server

Upload files looks good

Download files from remote server

Download files looks good

Contact

Feel free to email me lonnywong@qq.com (same as my PayPal account, just in case you want to deduct🤑).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

trzsz-svr-0.3.1.tar.gz (9.6 kB view hashes)

Uploaded Source

Built Distribution

trzsz_svr-0.3.1-py3-none-any.whl (10.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page