Skip to content
/ sbfiles Public

Copy/paste files using terminal scrollback buffer

License

Notifications You must be signed in to change notification settings

ybyygu/sbfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

程序目的

方便本地和远程(SSH)主机间小文件的交换, 即

  1. 复制本地文件 –> 远程主机命令行下当前目录粘贴
  2. 复制远程主机中的文件 –> 本地粘贴

这个小玩意不是为了取代scp/sftp之类的文件传输工具的, 而是为了在以下几种情况下更方便地进行文件交换:

  1. 直接将本地文件发送到远程主机命令行当前目录下, 或将命令行当前目录下文件直接取回本地. 省去scp和sftp切换目录的麻烦.
  2. 特别是当目标文件所在主机位于重重ssh嵌套(A -> B -> C), 没有办法直接来scp或sftp 时, 这个小工具用起来更方便些.

实现原理

  1. 将多个文件打包为tar.gz文件.
  2. 将tar.gz文件编码为base64, 实现纯文本化. 这里借鉴了邮件收发时对附件的处理.
  3. 通过字符终端的屏幕scrollback buffer来实现本地和远程文件的双向交换.

由于是通过终端屏幕来中转, 因此, 一次所能处理的文件大小就受限于终端最大能显示的行数. 这个数值(lines of scrollback)可手动设置. 不同的终端默认设置不同, mintty里是 10000行, putty里只有200行. 设大一些, 这样用来处理几百KB的文件(zip压缩后)不在话下.

使用方法

场景: 将远程主机文件复制到本地

  1. ssh 远程登录某主机(可任意嵌套).

  2. 在远程主机上使用sbfiles编码文件:

    sbfiles encode file-or-dir
    

    以上命令将编辑后的文本输出至屏幕, 将相关内容复制后待用.

    fd POSCAR | sbfiles e --clip
    

    以上命令将本目录下所有 POSCAR 目录编码为文本, 并将其写入本机的 clipboard (需要 OSC 52 支持)

  3. 在本地某个目录下执行如下命令:

    sbfiles decode
    

    以上命令将从 stdin 中读取待解码的文本. 在终端窗口中粘贴文本后, 将当前目录下生成解码后的相关文件.

其它说明

  • 本程序为files-coder.py的Rust改写版.
  • 致谢: 最初创意源于本人导师徐昕老师.

About

Copy/paste files using terminal scrollback buffer

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages