告别scp!用iTerm2的rz/sz在Mac上优雅地传文件(附保姆级配置脚本)

张开发
2026/4/21 8:41:54 15 分钟阅读

分享文章

告别scp!用iTerm2的rz/sz在Mac上优雅地传文件(附保姆级配置脚本)
在Mac上通过iTerm2实现rz/sz文件传输的终极指南每次用scp在终端和服务器之间传文件时那些繁琐的命令行参数是不是让你头疼作为Mac用户我们其实有更优雅的解决方案——iTerm2配合rz/sz工具可以实现点击即传的图形化文件传输体验。本文将带你彻底告别传统命令行文件传输的繁琐打造一个无缝衔接的工作流。1. 为什么选择iTerm2rz/sz方案传统文件传输方式如scp和sftp虽然功能强大但在日常开发中显得过于笨重。想象一下这样的场景你正在调试服务器上的一个配置文件需要快速将本地修改后的版本上传到服务器或者想把服务器上的日志文件下载到本地分析。使用scp你需要记住服务器地址和路径输入完整的scp命令反复确认路径是否正确处理各种权限问题而iTerm2rz/sz的方案则提供了这些优势图形化界面直接调用Mac原生文件选择对话框零命令记忆无需记住复杂的命令行参数即时反馈传输进度和结果一目了然无缝集成完全在终端环境中完成不切换窗口性能对比表特性scp/sftpiTerm2rz/sz学习曲线高低操作复杂度高低图形界面无有传输速度快中等适用场景批量传输日常单文件提示rz/sz特别适合日常开发中频繁的单文件传输场景对于大批量文件传输scp仍然是更好的选择。2. 环境准备与工具安装2.1 安装iTerm2iTerm2是Mac上终端体验的终极增强工具远超系统自带的Terminal应用。建议直接从官网下载最新版本# 使用Homebrew安装iTerm2推荐 brew install --cask iterm2安装完成后花点时间熟悉iTerm2的基本功能分屏操作CmdD垂直分割CmdShiftD水平分割搜索高亮CmdF粘贴历史CmdShiftH智能选择双击选中单词三击选中整行2.2 安装HomebrewHomebrew是Mac上不可或缺的包管理工具我们将用它来安装rz/sz工具。如果尚未安装执行以下命令/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)安装完成后将Homebrew添加到你的PATH环境变量中echo eval $(/opt/homebrew/bin/brew shellenv) ~/.zshrc source ~/.zshrc验证安装是否成功brew doctor2.3 安装lrzszlrzsz是rz/sz命令的Unix实现通过Homebrew一键安装brew install lrzsz安装完成后确认安装路径不同Homebrew版本路径可能不同brew list lrzsz典型输出示例/opt/homebrew/Cellar/lrzsz/0.12.20_1/bin/rz /opt/homebrew/Cellar/lrzsz/0.12.20_1/bin/sz记下这个路径后续配置脚本会用到。3. 配置iTerm2的rz/sz触发器3.1 创建传输脚本我们需要创建两个shell脚本分别处理上传和下载操作。在/usr/local/bin目录下创建sudo mkdir -p /usr/local/bin cd /usr/local/bin接收文件脚本 (iterm2-recv-zmodem.sh):#!/bin/bash # 检测iTerm2版本 osascript -e tell application iTerm2 to version /dev/null 21 NAMEiTerm2 || NAMEiTerm # 弹出文件夹选择对话框 if [[ $NAME iTerm ]]; then FILEosascript -e tell application iTerm to activate -e tell application iTerm to set thefile to choose folder with prompt 选择接收文件的保存位置 -e do shell script (\echo \(quoted form of POSIX path of thefile as Unicode text)\\) else FILEosascript -e tell application iTerm2 to activate -e tell application iTerm2 to set thefile to choose folder with prompt 选择接收文件的保存位置 -e do shell script (\echo \(quoted form of POSIX path of thefile as Unicode text)\\) fi if [[ $FILE ]]; then echo 传输已取消 # 发送ZModem取消信号 echo -e \\x18\\x18\\x18\\x18\\x18 sleep 1 echo echo # 传输取消 else cd $FILE # 注意替换为你的实际rz路径 /opt/homebrew/Cellar/lrzsz/0.12.20_1/bin/rz -E -e -b sleep 1 echo echo # 文件已保存到 $FILE fi发送文件脚本 (iterm2-send-zmodem.sh):#!/bin/bash # 检测iTerm2版本 osascript -e tell application iTerm2 to version /dev/null 21 NAMEiTerm2 || NAMEiTerm # 弹出文件选择对话框 if [[ $NAME iTerm ]]; then FILEosascript -e tell application iTerm to activate -e tell application iTerm to set thefile to choose file with prompt 选择要发送的文件 -e do shell script (\echo \(quoted form of POSIX path of thefile as Unicode text)\\) else FILEosascript -e tell application iTerm2 to activate -e tell application iTerm2 to set thefile to choose file with prompt 选择要发送的文件 -e do shell script (\echo \(quoted form of POSIX path of thefile as Unicode text)\\) fi if [[ $FILE ]]; then echo 传输已取消 # 发送ZModem取消信号 echo -e \\x18\\x18\\x18\\x18\\x18 sleep 1 echo echo # 传输取消 else # 注意替换为你的实际sz路径 /opt/homebrew/Cellar/lrzsz/0.12.20_1/bin/sz $FILE -e -b sleep 1 echo echo # 文件已发送 fi设置脚本权限chmod x /usr/local/bin/iterm2-*3.2 配置iTerm2触发器打开iTerm2偏好设置 (Cmd,)进入Profiles → Default → Advanced → Triggers点击Edit按钮添加以下两个触发器正则表达式动作参数rz waiting to receive.\*\*B0100Run Silent Coprocess/usr/local/bin/iterm2-send-zmodem.sh\*\*B00000000000000Run Silent Coprocess/usr/local/bin/iterm2-recv-zmodem.sh注意确保勾选Instant选项这样触发器会立即响应而不需要等待。4. 日常使用技巧与问题排查4.1 基本使用方法上传文件到远程服务器在远程服务器上执行rz命令Mac会自动弹出文件选择对话框选择要上传的文件文件将传输到远程服务器的当前目录从远程服务器下载文件在远程服务器上执行sz 文件名Mac会自动弹出文件夹选择对话框选择保存位置文件将下载到指定位置4.2 高级技巧批量传输 虽然rz/sz设计用于单文件传输但可以通过打包实现批量传输# 在服务器上打包文件 tar czf archive.tar.gz file1 file2 dir1 # 下载打包文件 sz archive.tar.gz # 上传后在服务器上解包 tar xzf archive.tar.gz传输中断续传 rz/sz本身不支持断点续传但可以通过以下方法模拟使用split命令分割大文件分别传输各个部分在另一端用cat合并常用参数参数说明-e转义所有控制字符-b二进制模式-y覆盖已存在文件-E对接收到的文件重命名4.3 常见问题解决问题1执行rz/sz命令没有弹出文件选择对话框解决方案确认iTerm2触发器配置正确检查脚本路径是否正确验证脚本是否有执行权限尝试重启iTerm2问题2传输速度慢优化建议使用-b参数强制二进制模式压缩后再传输特别是文本文件检查网络连接质量问题3权限被拒绝错误解决方法# 修改脚本权限 sudo chmod 755 /usr/local/bin/iterm2-* # 修改lrzsz安装目录权限 sudo chmod -R 755 /opt/homebrew/Cellar/lrzsz5. 替代方案比较与性能优化5.1 与其他传输工具对比虽然iTerm2rz/sz方案非常方便但它并不是唯一的选择。以下是几种常见方案的比较rsync优点增量传输、保持权限、支持断点续传缺点配置复杂、需要两端安装SFTP客户端优点图形界面、支持多文件操作缺点需要额外软件、与终端环境分离asciinematmux优点适合演示和教学缺点不适合实际文件传输5.2 性能优化技巧调整缓冲区大小 在脚本中添加-B参数可以调整缓冲区大小提高传输效率/opt/homebrew/Cellar/lrzsz/0.12.20_1/bin/sz -B 8192 $FILE使用压缩 虽然rz/sz本身不支持压缩但可以配合gzip使用# 发送端 gzip -c file | sz -b - # 接收端 rz -b | gzip -d file脚本自动化增强 修改脚本实现自动重命名和冲突解决# 在接收脚本中添加时间戳 FILENAME$(date %Y%m%d_%H%M%S)_$(basename $FILE) /opt/homebrew/Cellar/lrzsz/0.12.20_1/bin/rz -E -e -b -y -O $FILENAME5.3 安全注意事项虽然rz/sz非常方便但在生产环境中使用时需要注意敏感文件传输避免直接传输密码、密钥等敏感信息考虑使用加密压缩包服务器安全限制可以使用rz/sz的用户监控文件传输活动完整性验证 传输完成后验证文件完整性# 发送端生成校验和 md5sum file file.md5 # 接收端验证 md5sum -c file.md5这套iTerm2rz/sz的配置已经成为我日常开发不可或缺的工具特别是当需要快速在本地和服务器之间交换配置文件或日志时它大大简化了我的工作流程。最初设置可能需要一些耐心但一旦配置完成你会发现它带来的效率提升绝对值得投入。

更多文章